Floyd演算法(各對頂點之間的最短距離)

2021-09-22 10:58:57 字數 1339 閱讀 9092

floyd演算法(各對頂點之間的最短距離)

在上篇文章中談論到了如何求算單源最短路徑,因此要想求各對頂點之間的距離,只需迴圈求算n次即可。還有另外一種方法來求算各對頂點之間的最短距離,就是floyd演算法,由於其演算法過程比dijkstra更容易理解,並且**更簡潔,因此當求算各對頂點之間的最短距離常採用floyd演算法。

一.floyd演算法

假設從i到j的最短路徑上要經過若干個頂點,這些中間頂點中最大的頂點編號為k,最小的頂點為t,因此要求算dist[i][j]的最小值,那麼只需要求算dist[i][s]+dist[s][j](t<=s<=k)的所有值,並取其中最小者即可。因此可以設定乙個中間頂點k(0<=k**實現:

/*

每對頂點之間最短路徑floyd 2011.8.27

*/#include

<

iostream

>

#include

<

stack

>

#define

m 100

#define

n 100

using

namespace

std;

typedef

struct

node

mgraph;

void

floydpath(mgraph g,

intdist[n][m],

intpath[n][m])

else

else

}}for(k=0

;k<

g.n;k

++)

//中間插入點(注意理解k為什麼只能在最外層)

for(i=0

;i<

g.n;i

++)

for(j=0

;j<

g.n;j++)

}

}void

showpath(

intpath[n][m],

ints,

intt)

//列印出最短路徑

st.push(t);

while(!

st.empty())

}int

main(

intargc,

char

*ar**)

floydpath(g,dist,path);

for(i=0

;i<

g.n;i++)

for(j=0

;j<

g.n;j++)

}

}return0;

}

Floyd(各對頂點之間的最短距離)

我們其實可以求n次dijkstra,就可以求出各對頂點的最短路了。但是這不是重點,有乙個比他更清晰易懂的演算法 floyd 假設從i到j的最短路徑上要經過若干個頂點,這些中間頂點中最大的頂點編號為k,最小的頂點為t,因此要求算dist i j 的最小值,那麼只需要求算dist i s dist s ...

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

弗洛伊德演算法 include include include include define infinity 65535 定義乙個無限大的值 define maxsize 50 最大頂點個數 include using namespace std typedef char vertextype 4...

Floyd演算法(求每一對頂點之間的最短距離)

include include define ok 1 define error 1 define max vertex num 12 define network infinity 32767 typedef struct arccell adjmatrix max vertex num max ...