Check if there exist a path between a starting node "startNode" and an
ending node "endNode" on the graph under analysis.
startNode - The starting node.
endNode - The ending node.
True if such a path exists.
Return the transitive closure of the graph under analysis in the
form of two dimensional array. The first dimension represents
source node label while the second one represents sink node label.
Assume i and j are labels of two nodes.
The value of transitiveClosureMatrix()[i][j] is true if there
is a path on the graph from "i" to "j".