ノード0(最小ノード)から始まるDAGの最長パスを取得する方法を知りたい
wiki を検索したところ、次のアルゴリズムが得られました。
algorithm dag-longest-path is
input:
Directed acyclic graph G
output:
Length of the longest path
length_to = array with |V(G)| elements of type int with default value 0
for each vertex v in topOrder(G) do
for each edge (v, w) in E(G) do
if length_to[w] <= length_to[v] + weight(G,(v,w)) then
length_to[w] = length_to[v] + weight(G, (v,w))
return max(length_to[v] for v in V(G))
しかし、私はそれを実装する方法がわかりません。もちろん、私が書いた次のコードは機能しません:(トポはトポロジカルにソートされたノードです)
public static int longestPath(int[] topo){
int[] dist = new int[topo.length];
for(int i:topo){
if(isArc(node,i)){
if(dist[i]<dist[node]+1){
dist[i] = dist[node] + 1;
}
}
}
return getMax(dist);
}
どうすればいいですか?ありがとう!
また、0 から n-1 までの異なるパスの数を計算するアルゴリズムを教えてください。