資料結構 考研 Floyd演算法

2021-10-09 19:43:22 字數 1476 閱讀 8597

floyed 演算法與 dijkstra 演算法的思想完全一樣,遍歷整個鄰接矩陣,比較每一條邊可否加入迴圈中的兩邊之間來短接。

floyed 演算法基於動態規劃演算法,可以允許有負權值,但不可以有帶負權值的邊存在。

首先,初始化乙個鄰接矩陣,初始化乙個 dp 矩陣,初始化乙個頂點的前趨矩陣prev。

#define n 6 

vector> graph(n,vector(n,int_max)); //鄰接矩陣

vector> dp(n,vector(n,int_max));//dp陣列

vector> prev(n,vector(n,int_max));

void floyd()

} }

全部**如下:

#include#includeusing namespace std;

#define n 6

vector> graph(n,vector(n,int_max)); //鄰接矩陣

vector> dp(n,vector(n,int_max));//dp陣列

dp 陣列的第一行的結果和從 v1 頂點開始的 dijkstra 演算法是完全相同的。

dijkstra 演算法基於貪心策略。

dijkstra 演算法執行結果:

全部**:

#include#includeusing namespace std;

#define n 6

vector> graph(n,vector(n,int_max));//鄰接矩陣

vectorvisited(n,false); //訪問標記陣列

vectordis(n,int_max); //距離陣列

vectorprev(n,int_max); //前趨矩陣

vectorres;

void dijkstra(int v)

for(int i = 0;i < n;i ++){

if(dis[i] == int_max) cout<

else cout

dijkstra 演算法的時間複雜度o(n*n)。dijkstra 演算法中求最小邊的部分可以構造乙個堆來實現,時間複雜度就降到了o(n*logn)。

資料結構 Floyd演算法

演算法的思想 遍歷每個結點。然後以這個結點為中間結點來更新所有的結點。edge i,j min edge i k edge k j edge i j edge就是邊的長度 例如 image.png 首先 以 1 為中間結點,更新 1,2 1,3 1,4 1,5 1,6 2,3 2,4 等所有結點 其...

資料結構考研 KMP演算法

廢話少說,時間緊任務重,直接來。參考阮一峰的日誌 字串匹配的kmp演算法 只要求出部分匹配值 字首,字尾共有的最長的那個 也就是它到底移動幾位,也就解決了 移動位數 已匹配的字元數 對應的部分匹配值 部分匹配值 就是 字首 和 字尾 的最長的共有元素的長度。以 abcdabd 為例,a 的字首和字尾...

考研 資料結構 查詢演算法

查詢演算法 1.順序查詢 typedef struct sstable intsearch seq sstable s,int k return 1 增加哨兵 intsearch seq 02 sstable s,int k 2.折半查詢 僅適用於有序的順序表 o log2 n 公升序排列 intb...