資料結構 Floyd演算法

2021-09-11 22:43:12 字數 2300 閱讀 8818

演算法的思想:

遍歷每個結點。然後以這個結點為中間結點來更新所有的結點。

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)……等所有結點

其次,在以2為中間結點,更新(1,2),(1,3)(1,4)(1,5)(1,6)(2,3)(2,4)……等所有結點

再者,在以3為中間結點,更新(1,2),(1,3)(1,4)(1,5)(1,6)(2,3)(2,4)……等所有結點

以至於後面所有的結點。

**在這裡需要用到乙個陣列來記錄前繼結點。 **

這個演算法的主要形式就是三層迴圈。從外到內在這裡依次為一,二,三,層迴圈。

第一層迴圈是中間結點。

第二層迴圈0是起始結點

第三層迴圈是結束結點。

需要定義乙個path陣列。初始化為每對結點的終止結點,例如(i,j)那就在i,j對應的path陣列中對應的值為j。

初始化path陣列如下:

三層迴圈如下:

**如下;

//

// main.cpp

// floyd

//// created by 橘子和香蕉 on 2018/12/15.

///*

1:求各個頂點之間的最短路徑 時間複雜度是n*3

2:從圖的鄰接矩陣出發,

還是和之前的演算法一樣,找乙個中間結點來更新所有的結點。假如 v到 u最短距離,還有幾個結點,比如是m,n,b

遍歷這個結點,比如現在用m來更新所有的結點,看距離是不是短的,要是比之前短,就更新,否則,就不要更新,

就是。d(u,v) = min(d(u,v),d(u,m)+d(m,v))

這個演算法三層迴圈,中間結點在最外面的一層。因為這樣的才可以以他為中心,來遍歷所有的結點

*/#include using namespace std;

#define vertexnum 100

#define int_max 9999

class graph;

void graph::printgraph()

void graph::create()

char start ,end;

int wieght = -1;

for (int j = 0; j>start>>end>>wieght;

int startposition = locate(start);

int endposition = locate(end);

edge[startposition][endposition] = wieght;

edge[endposition][startposition] = wieght;

}}void graph:: initedge(){

for (int i = 0; i\t";

k = path[i][j];

cout

那怎麼輸出呢?

如下所示:

測試的時候是上面的圖。

例如要查詢 1 到 2 的對應的最短路徑

先去查詢path陣列中,1 ,2 對應的值,結果是4,這就說明4是第乙個中間結點,繼續查詢 path 中,4,2對應的項,發現是3,這就說明3是 2 到4 的中間結點。也就是1 到 2 的第二個中間結點,繼續查詢3 到 2 在path對應的項,發現是2,這就說明沒有中間結點了。

輸出**如下:

這裡的圖的無向帶權圖,**執行結果如下;

資料結構 考研 Floyd演算法

floyed 演算法與 dijkstra 演算法的思想完全一樣,遍歷整個鄰接矩陣,比較每一條邊可否加入迴圈中的兩邊之間來短接。floyed 演算法基於動態規劃演算法,可以允許有負權值,但不可以有帶負權值的邊存在。首先,初始化乙個鄰接矩陣,初始化乙個 dp 矩陣,初始化乙個頂點的前趨矩陣prev。de...

資料結構 Floyd

這個演算法比較好理解。include define maxvex 10 define infinity 655535 typedef struct graphtype int located graphtype g,char v0 void create graphtype g void floyd...

資料結構 Floyd演算法 順序儲存

include include structure.c define maxvertex 100 typedef char dis 輸出floyd中的矩陣 void printdis floyd amgraph g,int a maxvertex maxvertex printf n void pr...