相互接続されたエッジ ( E
) のリストがあります。ある頂点から別の頂点に接続する最短パスを見つけるにはどうすればよいですか?
最低共通祖先の使用を考えていますが、エッジには明確に定義されたルートがないため、解決策はうまくいかないと思います。
最短パスは、通過する頂点の最小数によって定義されます。
注: 2 つの頂点を接続するマルチパスが存在する可能性があるため、明らかに幅優先検索は機能しません。
相互接続されたエッジ ( E
) のリストがあります。ある頂点から別の頂点に接続する最短パスを見つけるにはどうすればよいですか?
最低共通祖先の使用を考えていますが、エッジには明確に定義されたルートがないため、解決策はうまくいかないと思います。
最短パスは、通過する頂点の最小数によって定義されます。
注: 2 つの頂点を接続するマルチパスが存在する可能性があるため、明らかに幅優先検索は機能しません。
ダイクストラのアルゴリズムがこれを行います。
ノードのすべてのペア間または 2 つの特定のノード間にパスが必要かどうかはわかりません。前者についてはすでに回答があったので、後者について説明します。
グラフに関する予備知識がない場合 (知っている場合は、A*などのヒューリスティック ベースの検索を使用できます)、幅優先検索を使用する必要があります。
Floyd-Warshallアルゴリズムは問題の解決策として考えられますが、全ペア最短経路問題を解決する他の解決策もあります。
Shortest path is defined by the minimum number of vertexes treversed
これは、エッジの最小数に 1 を加えたものと同じです。
標準の幅優先検索を使用でき、正常に機能します。2 つの頂点を接続する複数のパスがある場合は、そのうちの 1 つを保存するだけで、すべてのエッジの重みが 1 であるため、何の影響もありません。
さらに2セント。networkxを見てください。必要なものに対してすでに実装されている興味深いアルゴリズムがあり、最適なものを選択できます。