私は、Javaでダイクストラの最短ルートアルゴリズムを実装するプロジェクトに取り組んでいます。私は自分のプログラムでこのバージョンを使用しました:LINK
私のプログラムはソースを受け取り、次のような出力を提供します。
Distance to PE Hall: 0.0 Path: [PE Hall]
Distance to Reception: 1.0 Path: [PE Hall, Reception]
Distance to Stairs: 3.0 Path: [PE Hall, Stairs]
Distance to Refectory: 7.0 Path: [PE Hall, Stairs, Refectory]
私が本当に必要としているのは、パス内の各ノード間の距離を示す出力です。次に例を示します。
Distance to Refectory: 7.0 Path: [PE Hall 0.0, Stairs 3.0, Refectory 4.0]
-
アップデート
プログラムが各頂点に「前の頂点」変数を追加することでパスを保存することに気づきました。私の出力はまさに私が望む通りですが、パスを繰り返し処理してメソッドが返す距離は正しくありません。
Target = E250 Distance = 0.0 {E250=0.0}
Target = D Distance = 10.0 {E250=0.0, D=10.0}
Target = C250Trans Distance = 35.0 {E250=0.0, C250Trans=10.0, D=10.0}
これが、各ポイント間のパスと距離を含む配列リストを作成するために使用する方法です。
public static ArrayList<String> getShortestPaths(Vertex target)
{
ArrayList<String> path = new ArrayList<String>();
for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
{
path.add(vertex.name + "=" + vertex.getDistFromPrev());
}
Collections.reverse(path);
return path;
}
そして、頂点クラスに含まれるパス内の各ポイント間の距離を取得するために使用するメソッドは次のとおりです。
public double getDistFromPrev()
{
double weight = 0.;
for(Edge e : adjacencies){
if(e.target == this.previous){
weight = e.weight;
}
}
return weight;
}
参照用の距離行列は次のとおりです。
E250-D = 10
D-C250 = 25
誰かが、各頂点のprevious
変数を使用してパスを反復処理すると、誤ったエッジ距離が返される理由を明確にしてください。これは非常に役立ちます。