まず、ちょっとした背景: 基本的なグラフ アルゴリズム (Dijkstra、Floyd-Warshall、Bellman-Ford など) を備えた単純なグラフ クラスを作成して、今後のプログラミング コンテストのリファレンス シートとして使用する作業を行っています。
これまでのところ、機能するバージョンの Floyd-Warshall がありますが、欠点は、これまでのところ、最短パスではなく、2 つのノード間の最短距離の値しか得られないことです。できれば、別の関数を呼び出して再構築するのではなく、アルゴリズム自体の中でパス構築を行いたいと思います。
私が使用しているデータ構造に関する情報は次のとおりです。
vector< vector<int> > graph //contains the distance values from each node to each other node (graph[1][3] contains the length of the edge from node #1 to node #3, if no edge, the value is INF
vector< vector<int> > path //contains the "stepping stones" on how to reach a given node. path[st_node][end_node] contains the value of the next node on the way from end_node -> st_node
私が使用しているグラフデータの例は次のとおりです。
INF 10 INF INF INF INF
INF INF 90 15 INF INF
INF INF INF INF INF 20
INF INF INF INF 20 INF
INF INF 5 INF INF INF
INF INF INF INF INF INF
「パス」変数に入れる必要がある値は次のとおりです (各ノードから Dijkstra を実行して取得します)。
INF 0 4 1 3 2
INF INF 4 1 3 2
INF INF INF INF INF 2
INF INF 4 INF 3 2
INF INF 4 INF INF 2
INF INF INF INF INF INF
アルゴリズムに現在使用しているコードへのリンクは次のとおりです: (PasteBin 経由)。
どんな助けでも大歓迎です!
編集:ウィキペディアのコードを使用してパス マトリックスを生成しようとしましたが、結果は次のとおりです。
INF INF 4 1 3 4
INF INF 4 INF 3 4
INF INF INF INF INF INF
INF INF 4 INF INF 4
INF INF INF INF INF 2
INF INF INF INF INF INF
それはちょっと機能しますが、「単一の」ステップを表すことに関しては問題があります。たとえば、ノード 0 からノード 1 へのパスはどこでも定義されていません。(それでも、提案してくれたNali4Freedomに感謝します)