Floyd-Warshall算法
生活随笔
收集整理的這篇文章主要介紹了
Floyd-Warshall算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單路徑p={v1,v2,...,vl}上的中間頂點是除v1和vl以外p上得任何一個頂點。
令dij(k)為從頂點i到頂點j、且滿足所有中間頂點皆屬于{1,2,...,k}的一條最短路徑的權值。當k=0時,從i到j根本不存在中間頂點。
遞歸式為
dij(k)=wij if k=0??? or???????? min(dij(k-1) , dik(k-1) + dkj(k-1))?? if k>=1
?
?
?
floyd 1 int D[5][25];2
3 void Floyd_Warshall(const Graph* g)
4 {
5 for(int i=0;i<25;++i)
6 D[0][i]=g->W[i];
7
8 for(int k=1;k<=5;++k)
9 {
10 for(int i=1;i<=5;++i)
11 {
12 for(int j=1;j<=5;++j)
13 {
14 int a=D[k-1][5*(i-1)+j-1];
15 int b=D[k-1][5*(i-1)+k-1]+D[k-1][5*(k-1)+j-1];
16 if(a<b)
17 D[k][5*(i-1)+j-1]=a;
18 else
19 D[k][5*(i-1)+j-1]=b;
20 }
21 }
22 }
23 for(int i=0;i<25;++i)
24 {
25 int u=i/5+1;
26 int v=i%5+1;
27 cout <<"The shortest distance from "<<u<<" to "<<v<<" is "<<D[5][i]<<endl;
28 }
29 }
?
?
轉載于:https://www.cnblogs.com/daniagger/archive/2012/03/13/2394479.html
總結
以上是生活随笔為你收集整理的Floyd-Warshall算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 位图法排序
- 下一篇: csu 1019 Simple Line