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...