最短路徑(Dijkstra和Floyd)

2021-07-16 02:07:46 字數 767 閱讀 9186

floyd演算法(有點類似dp的思想)floyd(弗洛伊德)演算法的基本思想是:對乙個頂點個數為n的有向網(或無向網),設定乙個n×n的方陣a,其中除對角線的矩陣元素都等於外,其他元素a(k)[i][j] (i≠j)表示從頂點vi到頂點vj的有向路徑長度.(時間複雜度為o(n^3))

int edge[m][m];//鄰接矩陣    同時可以記錄從i到j最短路徑

for(i=1;i<=n;i++)//矩陣初始化

edge[i][j]=inf;}}

for(k=1;k<=n;k++)//  k為借助的中間點  }}

dijkstra演算法(記錄的是從源點v0到其他各個頂點的最短路徑,而floyd演算法的edge陣列記錄的從i到j的最短路徑。(時間複雜度(o(n^2)))

int edge[maxn][maxn];//鄰接矩陣

int dis[maxn];//記錄當前找到的從源點v0到終點vi的最短路徑的長度,初始時,dist[i]為edge[v0][i],即鄰接矩陣的第v0行。

int s[maxn];//標記有沒找到最短路徑  如找到s[i]=1,else s[i]=0;   初始時,s[v0]為1,其餘為0,表示最初集合s中只有頂點v

int max;

void dijkstra(int v0)//求頂點v0到其他頂點的最短路徑

s[v0]=1;

dis[v0]=0;

for(i=1;i<=max-1;i++)//從頂點v0確定n-1條最短路徑   所以只用迴圈max-1次

edge[i][j]=inf;}}

Dijkstra 最短路徑

dijkstra 最短路徑 針對有向圖,不支援負權值 圖的相鄰矩陣表示方法,還要用到最小值堆 include include define unvisited 0 define visited 1 define infinite 9999 設定最大值 define n 5 定義圖的頂點數 using...

dijkstra最短路徑

hehe和xixi在乙個地方玩遊戲,xixi把n 1件禮物 hehe以前送給xixi的 分別藏在了另外n 1個地方,這些地方都能互相到達,且所有的邊都是有方向的。現在hehe要做的事就是去那些地方找回那n 1件禮物給xixi 由於每一件禮物都有特殊的意義,所以xixi要求hehe每找到一件禮物,就必...

最短路徑 Dijkstra

首先,提出兩點 一 如果把不帶權圖上的所有邊的權值均定義為1,則該不帶權圖可以歸結為帶權圖 二 如果把無向圖中的每一條邊 vi,vj 都定義為弧和弧,則該無向圖可以歸結為有向圖。因此不失一般性,我們只用看有向帶權圖怎麼求解最短路徑問題就ok。帶權圖中,從乙個結點到另個一結點存在著多條路徑,稱每一條路...