首先,一点背景知识:我正在使用基本图算法(Dijkstra、Floyd-Warshall、Bellman-Ford 等)构建一个简单的图类,以用作即将举行的编程竞赛的参考表。
到目前为止,我有一个 Floyd-Warshall 的功能版本,但缺点是到目前为止它只让我得到两个节点之间的最短距离值,而不是最短路径。最好我希望在算法本身内进行路径构建,而不必调用另一个函数来重建它。
以下是有关我正在使用的数据结构的一些信息:
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 的建议)