首先,有一點背景:我正在構建一個帶有基本圖算法(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
下面是我正在使用的算法代碼的鏈接:(via PasteBin)。
任何幫助將不勝感激!
編輯:我試圖Wikipedia's code生成路徑矩陣和這裏的結果:
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的建議)
如果我正在閱讀這個權利,根據'graph'的第一行,只有一個來自節點#0的邊,並且它導致節點#1。所以'path'的第一行(或者第一列)應該是'Inf 1 1 1 1 1'。我錯過了什麼? – Beta 2010-10-25 23:15:26
啊,我看你怎麼會覺得困惑。 'graph'中的每一行列出了從該節點離開的邊,而'path'中的每一行都包含了到達'node#[row_num]'的路徑。例如,正確的「路徑」圖的第一行意味着要從節點5(col = 5)到達節點0(行= 0),返回路上的下一個節點是節點2.要到達節點0從節點2我們使用節點4,然後節點3,然後節點1,然後最終在我們的目的地與節點0. – 2010-10-26 05:07:40