DAGの隣接リストMap<Vertex, Set<Vertex>>
が与えられた場合、すべての頂点の到達可能性を計算したいと考えています (つまり、u から v へのパスがある場合)。
static Map<Vertex, Set<Vertex>> reachability(Map<Vertex, Set<Vertex>> adjList) {}
Floyd-Warshall を使用して可能であることを知っていますO(V^3)
// Convert adjList to adjacency matrix mat
void reachability(boolean mat[][]) {
final int N = mat.length;
for (int k = 0; k < N; k++)
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
mat[i][j] |= mat[i][k] && mat[k][j];
}
しかし、私はスパース グラフ (および隣接リスト) を持っているので、これを行うための最速の方法は何ですか?