我試圖用這個邏輯來理解正在發生的事情與adjacency matrix,但我massivley困惑的地方說約interspacing是ABCD .....弗洛伊德 - Warshall算法邏輯 - 卡住
任何人都可以解釋這裏發生了什麼?
謝謝 (標記爲Java作爲其這是在向我們展示的語言,所以如果有人發佈任何代碼示例,他們可以看到它是在語言)
http://compprog.wordpress.com/2007/11/15/all-sources-shortest-path-the-floyd-warshall-algorithm/
這裏是代碼:
for (k = 0; k < n; ++k) {
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
/* If i and j are different nodes and if
the paths between i and k and between
k and j exist, do */
if ((dist[i][k] * dist[k][j] != 0) && (i != j))
/* See if you can't get a shorter path
between i and j by interspacing
k somewhere along the current
path */
if ((dist[i][k] + dist[k][j] < dist[i][j]) ||
(dist[i][j] == 0))
dist[i][j] = dist[i][k] + dist[k][j];
@stan:Floyd-Warshall是典型的「DP算法」之一,以及Levenhstein的編輯距離和「0-1揹負」。要理解它,你需要了解什麼是「動態規劃」(大多數沒有CS學位的程序員都不瞭解DP)。關於這個主題的維基百科條目是很好的:http://en.wikipedia.org/wiki/Dynamic_programming,否則你可以嘗試參加一些在線比賽(如TopCoder),其中通常很多問題需要DP解。 – SyntaxT3rr0r 2010-04-22 10:50:56