弗洛伊德演算法 從某個頂點到其他頂點之間的最短路徑

2021-10-12 05:25:38 字數 2770 閱讀 8676

弗洛伊德演算法:

#include

#include

#include

#include

#define infinity 65535

//定義乙個無限大的值

#define maxsize 50

//最大頂點個數

#include

using

namespace std;

typedef

char vertextype[4]

;typedef

char infoptr;

typedef

int vrtype;

typedef

enum

graphkind;

//圖的型別:有向圖,有向網,無向圖,無向網

//迪傑斯特拉演算法

typedef

int pathmatrix[maxsize]

;//定義乙個儲存最短路徑的一堆陣列

typedef

int shortpathlength[maxsize]

;//定義乙個儲存到從頂點v0到頂點v的最短距離的陣列

typedef

struct

arcnode,adjmatrix[maxsize]

[maxsize]

;//圖型別的定義

typedef

struct

mgraph;

//建立無向網n

void

creategraph1

(mgraph *n)

;//查詢

intlocatevertex

(mgraph n,vertextype v)

;//銷毀

void

destroygraph

(mgraph *n)

;//列印網

void

displaygraph

(mgraph n)

;//弗洛伊德演算法

void

floyd_short_path

(mgraph n)

;//建立無向網n

void

creategraph1

(mgraph *n)

//初始化鄰接矩陣

for(i=

0;i>vernum;i++)}

printf

("請輸入%d條弧的弧尾 弧頭 權值 (以空格作為間距):\n"

,n->arcnum)

;for

(k=0

;k>arcnum;k++)}

} n-

>kind=dn;

}//查詢

intlocatevertex

(mgraph n,vertextype v)

}return-1

;}//銷毀網

void

destroygraph

(mgraph *n)}}

} n-

>vernum=0;

n->arcnum=0;

}//網列印

void

displaygraph

(mgraph n)

printf

("\n網n的;\n");

printf

("序號i=");

for(i=

0;i)printf

("%4d"

,i);

printf

("\n");

for(i=

0;i)printf

("\n");

}}//前驅結點

void

printmatrix

(int a[

][maxsize]

,int n)

printf

("\n");

}}//輸出最短路徑

void

print_short_path

(mgraph n,

int d[

][maxsize]

,int p[

][maxsize]

) c++

; apath[c]

=v;//路徑上新增起點

printf

("%d"

,apath[c]);

//輸出起點

for(n=c-

1;n>=

0;n--

)printf

("\t\t路徑長度為:%d\n"

,d[v]

[u]);}

}}}//弗洛伊德演算法

//d[u][v]表示從u到v當前得到的最短路徑,p[u][v]存放的是u到v的前度頂點

void

floyd_short_path

(mgraph n)

else}}

for(w=

0;w}}

print_short_path

(n,d,p)

;//輸出最短路徑

printf

("最短路徑中各頂點的前驅頂點:\n");

printmatrix

(p,n.vernum)

;//輸出前驅頂點

每隊頂點之間的最短路徑(弗洛伊德演算法)

floyd演算法 又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的演算法,與dijkstra演算法類似。該演算法名稱以創始人之一 1978年圖靈獎獲得者 史丹福大學電腦科學系教授羅伯特 弗洛伊德命名。通過乙個圖的權值 矩陣求出它的每兩點間的 最短路徑矩陣。從圖的帶權 鄰接...

弗洛伊德演算法(求各頂點間最短路徑) 可列印最短路徑

include include include using namespace std define infinity 65535 define max vertex num 10 typedef struct mgraphmgraph int locatevex mgraph g,string u...

弗洛伊德演算法(每一對頂點之間的最短路徑)

for int i 1 i vtxnum i for int j 1 j vtxnum j for k 1 k vtxnum k 中間點 for int i 1 i vtxnum i for int j 1 j vtxnum j if dist i k dist k j dist i j dist是...