青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對現(xiàn)實(shí),超越自己
逆水行舟,不進(jìn)則退
posts - 269,comments - 32,trackbacks - 0

Floyd-Warshall算法,簡稱Floyd算法,用于求解任意兩點(diǎn)間的最短距離,時間復(fù)雜度為O(n^3)。

使用條件&范圍
通常可以在任何圖中使用,包括有向圖、帶負(fù)權(quán)邊的圖。

Floyd-Warshall 算法用來找出每對點(diǎn)之間的最短距離。它需要用鄰接矩陣來儲存邊,這個算法通過考慮最佳子路徑來得到最佳路徑。

1.注意單獨(dú)一條邊的路徑也不一定是最佳路徑。
2.從任意一條單邊路徑開始。所有兩點(diǎn)之間的距離是邊的權(quán),或者無窮大,如果兩點(diǎn)之間沒有邊相連。
對于每一對頂點(diǎn) u 和 v,看看是否存在一個頂點(diǎn) w 使得從 u 到 w 再到 v 比己知的路徑更短。如果是更新它。
3.不可思議的是,只要按排適當(dāng),就能得到結(jié)果。
偽代碼:

 1 // dist(i,j) 為從節(jié)點(diǎn)i到節(jié)點(diǎn)j的最短距離
 2 For i←1 to n do
 3    For j←1 to n do
 4       dist(i,j) = weight(i,j) 
 5  
 6 For k←1 to n do // k為“媒介節(jié)點(diǎn)”
 7    For i←1 to n do
 8       For j←1 to n do
 9          if (dist(i,k) + dist(k,j) < dist(i,j)) then // 是否是更短的路徑?
10             dist(i,j) = dist(i,k) + dist(k,j)

我們平時所見的Floyd算法的一般形式如下:

 

1 void Floyd(){
2      int i,j,k;
3      for(k=1;k<=n;k++)
4          for(i=1;i<=n;i++)
5              for(j=1;j<=n;j++)
6                  if(dist[i][k]+dist[k][j]<dist[i][j])
7                      dist[i][j]=dist[i][k]+dist[k][j];
8 }

注意下第6行這個地方,如果dist[i][k]或者dist[k][j]不存在,程序中用一個很大的數(shù)代替。最好寫成if(dist[i] [k]!=INF && dist[k][j]!=INF && dist[i][k]+dist[k][j]

Floyd算法的實(shí)現(xiàn)以及輸出最短路徑和最短路徑長度,具體過程請看【動畫演示Floyd算法】。

代碼說明幾點(diǎn):

1、A[][]數(shù)組初始化為各頂點(diǎn)間的原本距離,最后存儲各頂點(diǎn)間的最短距離。

2、path[][]數(shù)組保存最短路徑,與當(dāng)前迭代的次數(shù)有關(guān)。初始化都為-1,表示沒有中間頂點(diǎn)。在求A[i][j]過程中,path[i][j]存放從頂點(diǎn)vi到頂點(diǎn)vj的中間頂點(diǎn)編號不大于k的最短路徑上前一個結(jié)點(diǎn)的編號。在算法結(jié)束時,由二維數(shù)組path的值回溯,可以得到從頂點(diǎn)vi到頂點(diǎn)vj的最短路徑。

初始化A[][]數(shù)組為如下,即有向圖的鄰接矩陣。



完整的實(shí)現(xiàn)代碼如下:

  1 #include <iostream>
  2 #include <string>   
  3 #include <stdio.h>   
  4 using namespace std;   
  5 #define MaxVertexNum 100   
  6 #define INF 32767   
  7 typedef struct  
  8 {   
  9     char vertex[MaxVertexNum];   
 10     int edges[MaxVertexNum][MaxVertexNum];   
 11     int n,e;   
 12 }MGraph;   
 13  
 14 void CreateMGraph(MGraph &G)   
 15 {   
 16     int i,j,k,p;   
 17     cout<<"請輸入頂點(diǎn)數(shù)和邊數(shù):";   
 18     cin>>G.n>>G.e;   
 19     cout<<"請輸入頂點(diǎn)元素:";   
 20     for (i=0;i<G.n;i++)   
 21     {   
 22         cin>>G.vertex[i];   
 23     }   
 24     for (i=0;i<G.n;i++)   
 25     {   
 26         for (j=0;j<G.n;j++)   
 27         {   
 28             G.edges[i][j]=INF;   
 29             if (i==j)   
 30             {   
 31                 G.edges[i][j]=0;   
 32             }   
 33         }   
 34     }      
 35     for (k=0;k<G.e;k++)   
 36     {   
 37         cout<<"請輸入第"<<k+1<<"條弧頭弧尾序號和相應(yīng)的權(quán)值:";   
 38         cin>>i>>j>>p;   
 39         G.edges[i][j]=p;   
 40     }   
 41 }   
 42 void Dispath(int A[][MaxVertexNum],int path[][MaxVertexNum],int n);
 43  
 44 void Floyd(MGraph G)
 45 {
 46     int A[MaxVertexNum][MaxVertexNum],path[MaxVertexNum][MaxVertexNum];
 47     int i,j,k;
 48     for (i=0;i<G.n;i++)
 49     {
 50         for (j=0;j<G.n;j++)
 51         {
 52             A[i][j]=G.edges[i][j];
 53             path[i][j]=-1;
 54         }
 55     }
 56     for (k=0;k<G.n;k++)
 57     {
 58         for (i=0;i<G.n;i++)
 59         {
 60             for (j=0;j<G.n;j++)
 61             {
 62                 if (A[i][j]>A[i][k]+A[k][j])
 63                 {
 64                     A[i][j]=A[i][k]+A[k][j];
 65                     path[i][j]=k;
 66                 }
 67             }
 68         }
 69     }
 70     Dispath(A,path,G.n);
 71 }
 72  
 73 void Ppath(int path[][MaxVertexNum],int i,int j)
 74 {
 75     int k;
 76     k=path[i][j];
 77     if (k==-1)
 78     {
 79         return;
 80     }
 81     Ppath(path,i,k);
 82     printf("%d,",k);
 83     Ppath(path,k,j);
 84 }
 85  
 86 void Dispath(int A[][MaxVertexNum],int path[][MaxVertexNum],int n)
 87 {
 88     int i,j;
 89     for (i=0;i<n;i++)
 90     {
 91         for (j=0;j<n;j++)
 92         {
 93             if (A[i][j]==INF)
 94             {
 95                 if (i!=j)
 96                 {
 97                     printf("從%d到%d沒有路徑\n",i,j);
 98                 }
 99             }
100             else
101             {
102                 printf("  從%d到%d=>路徑長度:%d路徑:",i,j,A[i][j]);
103                 printf("%d,",i);
104                 Ppath(path,i,j);
105                 printf("%d\n",j);
106             }
107         }
108     }
109 }
110  
111 int main()
112 {
113     freopen("input2.txt""r", stdin);
114     MGraph G;
115     CreateMGraph(G);
116     Floyd(G);
117     return 0;
118 }

測試結(jié)果如下:



本文轉(zhuǎn)自:http://www.wutianqi.com/?p=1903

posted on 2012-06-30 16:18 王海光 閱讀(11421) 評論(2)  編輯 收藏 引用 所屬分類: 算法

FeedBack:
# re: 最短路徑算法—Floyd(弗洛伊德)算法分析與實(shí)現(xiàn)(C/C++)
2015-08-04 17:13 | 11111111
為什么不能運(yùn)行
  回復(fù)  更多評論
  
# re: 最短路徑算法—Floyd(弗洛伊德)算法分析與實(shí)現(xiàn)(C/C++)
2015-12-25 11:15 | 大神
沒有error,沒有warning,但是點(diǎn)運(yùn)行后提示Cannot execute pragram。怎么回事阿  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            好吊一区二区三区| 奶水喷射视频一区| 一本一道久久综合狠狠老精东影业 | 欧美亚洲成人网| 国产欧美精品一区| 亚洲欧美偷拍卡通变态| 久久久久久免费| 欧美日韩精品一二三区| 国产乱码精品一区二区三区忘忧草| 一区二区av在线| 亚洲在线一区| 欧美激情第8页| 国产日韩一区二区三区在线| 激情久久影院| 亚洲欧美综合精品久久成人 | 亚洲一区尤物| 亚洲二区在线| 久久久久久久久久久久久久一区| 久久精品国产v日韩v亚洲 | 99精品视频免费全部在线| 亚洲欧美日韩国产一区二区三区| 欧美一区成人| 看欧美日韩国产| 黄色一区二区在线| 久久国产天堂福利天堂| 亚洲综合视频一区| 国产精品久久久久毛片大屁完整版 | 精品91在线| 亚洲综合另类| 欧美xart系列高清| 久久青草久久| 亚洲精品日韩激情在线电影| 99在线|亚洲一区二区| 欧美成人午夜激情视频| 久久女同互慰一区二区三区| 国模精品娜娜一二三区| 久久亚洲精选| 欧美日韩一区精品| 亚洲一区二区3| 亚洲一区二区动漫| 国产欧美精品va在线观看| 午夜精品久久久久久99热| 一本色道久久88综合日韩精品 | 国产日韩精品久久久| 羞羞视频在线观看欧美| 久久精品日韩欧美| 国产亚洲激情| 亚洲国产精品va在看黑人| 欧美日韩国产小视频在线观看| 性做久久久久久免费观看欧美| 一本久久青青| 亚洲一区美女视频在线观看免费| 99pao成人国产永久免费视频| 欧美成人中文| 欧美精品尤物在线| 久久久久免费| 欧美激情欧美激情在线五月| 久久综合九色综合久99| 狠狠色综合色综合网络| 久久动漫亚洲| 欧美成人久久| 亚洲精品乱码久久久久久黑人| 好看的日韩视频| 亚洲免费精彩视频| 91久久综合亚洲鲁鲁五月天| 午夜视频精品| 欧美在线观看一区| 欧美日韩三区| 一片黄亚洲嫩模| 久久精品亚洲精品| 国产一区二区| 免费成人小视频| 国产欧美一区二区三区国产幕精品| 一级日韩一区在线观看| 久久九九免费| 亚洲国产成人高清精品| 一本久久精品一区二区| 国产精品久久久久免费a∨| 亚洲一区二区3| 欧美在线播放视频| 韩国福利一区| 亚洲视频免费观看| 久久九九电影| 亚洲日本中文| 国产欧美日韩一区二区三区在线观看 | 亚洲精品乱码久久久久久黑人| 91久久久久久| 99精品热视频只有精品10| 久久av最新网址| 久久精品天堂| 在线亚洲成人| 狠狠色狠色综合曰曰| 欧美视频在线观看免费| 久久精品视频在线| 亚洲先锋成人| 欧美一级在线亚洲天堂| 亚洲免费精彩视频| 韩日成人av| 亚洲欧美日韩在线一区| 美女久久网站| 欧美一区二区三区四区在线| 一区二区三区高清不卡| 国产美女诱惑一区二区| 欧美日韩亚洲高清| 麻豆av福利av久久av| 一区二区免费在线播放| 亚洲破处大片| 91久久精品国产| 久久精品99国产精品酒店日本| 欧美成人中文字幕在线| 久久免费精品日本久久中文字幕| 国产精品入口| 欧美午夜免费影院| 免费看黄裸体一级大秀欧美| 亚洲电影网站| 亚洲欧美电影在线观看| 久久久国产精品一区二区中文| 亚洲欧洲日本一区二区三区| 一区二区欧美国产| 欧美第十八页| 国产尤物精品| 久久国产福利| 亚洲色图在线视频| 久久男人资源视频| 99视频精品全国免费| 久久精品视频免费播放| 国产女主播一区二区三区| 99www免费人成精品| 欧美国产日韩一区二区在线观看| 免费在线观看日韩欧美| 性欧美1819sex性高清| 国产精品乱码人人做人人爱| 日韩视频一区二区三区| 欧美大片在线看| 另类欧美日韩国产在线| 狠狠狠色丁香婷婷综合激情| 久久精品一区二区三区四区| 亚洲男女自偷自拍| 国产精品高潮久久| 午夜欧美理论片| 亚洲欧美综合网| 狠狠久久亚洲欧美| 欧美黄网免费在线观看| 美女在线一区二区| 在线亚洲一区二区| 亚洲天堂男人| 国产免费亚洲高清| 欧美黄污视频| 国产一级精品aaaaa看| 男男成人高潮片免费网站| 欧美高清自拍一区| 亚洲一区精品视频| 久久精品一本| 中文精品视频| 欧美一乱一性一交一视频| 亚洲国产视频一区| 亚洲免费观看视频| 亚洲国产成人精品久久久国产成人一区 | 亚洲作爱视频| 亚洲综合国产| 中文久久精品| 免费亚洲一区| 久久一本综合频道| 国产精品你懂的| 一本大道久久精品懂色aⅴ| 久久久人成影片一区二区三区 | 日韩一级黄色av| 亚洲女人天堂成人av在线| 日韩午夜电影av| 久久久国产91| 久久精品国产亚洲一区二区三区| 亚洲美女视频| 亚洲经典三级| 亚洲自拍偷拍麻豆| 亚洲伊人一本大道中文字幕| 欧美电影打屁股sp| 巨乳诱惑日韩免费av| 国产色婷婷国产综合在线理论片a| 亚洲午夜精品网| 欧美福利小视频| 欧美承认网站| 一区在线观看视频| 免费在线成人| 亚洲精品综合精品自拍| 亚洲无线视频| 国产精品一区二区女厕厕| 亚洲在线视频观看| 久久久亚洲精品一区二区三区 | 久久久久国产成人精品亚洲午夜| 国产精品久久久久国产精品日日| 亚洲一区二区视频| 国产精品成人aaaaa网站| 亚洲一区二区少妇| 久久精品在线免费观看| 亚洲国产经典视频| 欧美高清视频一区二区三区在线观看| 亚洲性线免费观看视频成熟| 欧美日韩蜜桃| 久久九九国产精品| 亚洲精品国产精品久久清纯直播 |