1

私はグラフを持っていて、ダイクストラ アルゴリズムを使用して最短パス検索を実行したいと考えています (アルゴリズムについてはあまり気にしませんが、ダイクストラは私がよく知っているアルゴリズムです)。

これは私が持っているグラフの関連部分です:

ここに画像の説明を入力

ここで、Quickgraph のドキュメントに従って、ダイクストラ検索を行います。

//Build QuickGraph UndirectedGraph from our data
UndirectedGraph<int, Edge<int>> ug = g.CreateUndirectedQuickGraph();

Func<Edge<int>,double> weightFunc = (Edge<int> edge) =>
{
    return 1; //without weights at this moment
};

var tryGetPath = ug.ShortestPathsDijkstra(weightFunc, 20);

IEnumerable<Edge<int>> path;
if (tryGetPath(23, out path))
    foreach (var e in path)
        Trace.WriteLine(e);

ご覧のとおり、ノード 20 と 23 の間の最短パスを取得しようとしています。取得した出力は次のとおりです。

20 -> 4
22 -> 4
23 -> 22

それはちょっと正しいようですが、そこからノードパスを抽出する方法がよくわかりません。私は次のようなものを期待していました:

20 -> 4
4 -> 22
22 -> 23

この出力から最終的なパスを構築するにはどうすればよいですか?


20 から 34 を取得する例:

 20->3 
 5->3 
 8->5 
 9->8
 36->9
 36->11
 34->11

36->11最後のエッジの直前にどのように表示されるかに注目してください。

4

1 に答える 1