最短路徑迪傑斯特拉演算法和弗洛伊德演算法實現

2021-09-02 00:24:49 字數 1135 閱讀 7726

迪傑斯特拉演算法:

矩陣二位陣列矩陣t儲存頂點vi到各頂點的最短路徑值,初始狀態為鄰接頂點為弧的權值,非鄰接頂點為無窮大。陣列s用於儲存最短路徑,儲存單元為該弧的前驅頂點的下標和與前驅頂點之間的弧的權值。

1.從t中找出一條弧值最小的弧(vi,vj),將該弧加入s中,並根據vj的鄰接點vx更新t,如果(vi,vj)+(vj ,vx) < (vi,vx),則更新(vi,vx)為(vi,vj)+(vj ,vx) ,並記錄其vx的前驅為vj

2.從t中找出不在s中的剩餘的弧中權值最小的重複1步驟。

**實現:

/**

* @name 最短路徑迪傑斯特拉演算法

* @use 使用迪傑斯特拉演算法計算圖(二維陣列)的最短路徑

* @param chart 圖

* @param start 起始結點

* @return t 最短路徑集合

*/public static function shortestpathd($chart, $start)

while (count($points) < count($chart))

}$t[$tempindex]['value'] = $min;

$points = $tempindex;

foreach ($chart[$tempindex] as $key => $value) }}

}unset($t[$start]);

return $t;

}

弗洛伊德演算法:

演算法思想,以每乙個頂點為中介值去更新矩陣。

/**

* @name 最短路徑弗洛伊德演算法

* @use 使用弗洛伊德演算法計算圖(二維陣列)的最短路徑

* @param chart 圖

* @param start 起始結點

* @return t 最短路徑集合

*/public static function shortestpathf($chart, $start)

if (($chart[$k1][$key] + $chart[$key][$k2]) < $chart[$k1][$k2]) }}

}return $chart;

}

最短路徑 迪傑斯特拉演算法

例如,要求下圖v0到v8的最短路徑 所以我們可以找到這樣的一條最短路徑 下面是他的鄰接矩陣 偽 如下 define maxvex 9 define infinity 65535 typedef int patharc maxvex 用於儲存最短路徑下標的陣列 typedef int shortpat...

迪傑斯特拉最短路徑演算法

時間限制 1 sec 記憶體限制 32 mb 提交 27 解決 17 提交 狀態 命題人 外部匯入 題目描述 在帶權有向圖g中,給定乙個源點v,求從v到g中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的...

最短路徑(迪傑斯特拉演算法)

源 include define maxint 32767 表示極大值 define mvnum 100 最大頂點數 typedef char vertextype 定義資料型別 typedef int arctype typedef struct amgraph int locatevex amg...