




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
11.問題的提出:已知一個各邊權(quán)值均大于0的帶權(quán)有向圖,對每一對頂點vi
vj,要求求出vi
與vj之間的最短路徑和最短路徑長度。2.解決辦法方法一:每次以一個頂點為源點,重復(fù)執(zhí)行Dijkstra算法n次——T(n)=O(n3)方法二:弗洛伊德(Floyd)算法算法12--最短路徑--弗洛伊德(Floyd)算法2求最短路徑步驟初始時設(shè)置一個n階方陣,令其對角線元素為0,若存在弧<Vi,Vj>,則對應(yīng)元素為權(quán)值;否則為
逐步試著在原直接路徑中增加中間頂點,若加入中間點后路徑變短,則修改之;否則,維持原值所有頂點試探完畢,算法結(jié)束3.Floyd算法思想:逐個頂點試探法算法12--最短路徑--弗洛伊德(Floyd)算法
從圖的帶權(quán)鄰接矩陣G.arcs出發(fā),假設(shè)求頂點Vi到Vj的最短路徑。如果從Vi到Vj有弧,則從Vi到Vj存在一條長度為G.arcs[i][j]的路徑,但該路徑是否一定是最短路徑,還需要進行n次試探。
1.第一次,判別(Vi,V0)和(V0,Vj),即判別(Vi,V0,Vj)是否存在,若存在,則比較(Vi,Vj)和(Vi,V0,Vj)的長度,取長度較短的為從Vi到Vj的中間頂點序號不大于0的最短路徑。算法12--最短路徑--弗洛伊德(Floyd)算法
2.第二次,再加一個頂點V1,如果(Vi,…,V1)和(V1,…,Vj)分別是當前找到的中間頂點序號不大于0的最短路徑,那么(Vi,…,V1,…,Vj)就有可能是從Vi到Vj的中間頂點序號不大于1的最短路徑。將它和已經(jīng)得到的從Vi到Vj之間頂點序號不大于0的最短路徑相比較,取較短者為從Vi到Vj的中間頂點序號不大于1的最短路徑。
3.第三次,再加一個頂點V2,繼續(xù)進行試探。
算法12--最短路徑--弗洛伊德(Floyd)算法V2V3V0V1123456890123012301240092350801608888D(-1)=
D(-1)為有向網(wǎng)的鄰接矩陣
第一步:以D(-1)為基礎(chǔ),以V0為中間頂點,求從Vi到Vj的最短路徑。該路徑或者為從Vi到Vj的邊,或者為(Vi,V0)+(V0,Vj)。
D(0)[i][j]=
min{D(-1)[i][j],
D(-1)[i][0]+D(-1)[0][j]}47D(0)=
D(0)[i][j]為從Vi到Vj的中間頂點序號不大于0的最短路徑長度.V0算法12--最短路徑--弗洛伊德(Floyd)算法V2V3V0V112345689
以D(0)為基礎(chǔ),以V1為中間頂點,求從Vi,到Vj的最短路徑。該路徑或者為從Vi到Vj的邊,或者為從Vi開始通過V0或V1到達Vj的最短路徑。
D(1)[i][j]=
min{D(0)[i][j],
D(0)[i][1]+D(0)[1][j]}0123012301240092350801608888A(-1)=47D(0)=1036D(1)=V0V1V0V1算法12--最短路徑--弗洛伊德(Floyd)算法V2V3V0V112345689
以D(1)為基礎(chǔ),以V2為中間頂點,求從Vi,到Vj的最短路徑。或者為從Vi到Vj的邊,或者為從Vi開始通過V0,V1,V2到達Vj的最短路徑。
D(2)[i][j]=
min{D(1)[i][j],
D(1)[i][2]+D(1)[2][j]}0123012301240092350801608888A(-1)=47A(0)=1036D(1)=D(2)=12
910V0V1V2算法12--最短路徑--弗洛伊德(Floyd)算法0123012301240092350801608888A(-1)=47A(0)=1036A(1)=D(2)=12
910D(3)=V2V3V0V112345689
以D(2)為基礎(chǔ),以V3為中間頂點,求從Vi,到Vj的最短路徑?;蛘邽閺腣i到Vj的邊,或者為從Vi開始通過V0,V1,V2,V3到達Vj的最短路徑。
D(3)[i][j]=
min{D(2)[i][j],
D(2)[i][3]+D(2)[3][j]}
9
11
8V3V2V0V1
D(3)[i][j]即為從Vi到Vj的最短路徑長度.算法12--最短路徑--弗洛伊德(Floyd)算法9ACB264311041160230初始:路徑:ABACBA
BCCA046602370加入B:路徑:ABABCBA
BCCA
CAB0411602370加入A:路徑:ABACBA
BCCACAB046502370加入C:路徑:AB
ABCBCA
BCCA
CAB例題:算法12--最短路徑--弗洛伊德(Floyd)算法10例ACB264311初始:041160230length=011202300path=加入A:0411602370length=011202310path=加入B:046602370length=012202310path=加入C:046502370length=012302310path=算法12--最短路徑--弗洛伊德(Floyd)算法114.論點:A(-1)[i][j]是從頂點vi到vj,中間頂點是
v1的最短路徑的長度,A(k)[i][j]是從頂點vi到vj,
中間頂點的序號不大于k的最短路徑的長度,A(n-1)[i][j]是從頂點vi到vj的最短路徑長度。證明:歸納證明,始歸納于s(上角標);(1)歸納基礎(chǔ):當s=-1時,A(-1)[i][j]=Edge[i][j],vi到vj,不經(jīng)過任何頂點的邊,是最短路徑。(2)歸納假設(shè):當s<k時,A(s)[i][j]是從頂點vi到vj,中間頂點的序號不大于s的最短路徑的長度;(3)當s=k時,算法12--最短路徑--弗洛伊德(Floyd)算法12ijkA(k-1)[i][k]A(k-1)[k][j]A(k-1)[i][j]因為:A(k)[i][j]=min{A(k-1)[i][j],
A(k-1)[i][k]+A(k-1)[k][j]}由歸納假設(shè)知:A(k-1)[i][j]:是i到j(luò)的最短路徑(標號不高于k-1);A(k-1)[i][k]:是i到k的最短路徑(標號不高于k-1);A(k-1)[k][j]:是k到j(luò)的最短路徑(標號不高于k-1);所以:A(k)[i][j]是i到j(luò)的最短路徑(標號不高于k)。
算法12--最短路徑--弗洛伊德(Floyd)算法13圖用鄰接矩陣存儲edge[][]存放最短路徑長度path[i][j]是從Vi到Vj的最短路徑上Vj前一頂點序號5.算法實現(xiàn)voidfloyd(){for(inti=0;i<n;i++)//矩陣dist與path初始化
for(int
j=0;j<n;j++){//置A(-1)dist[i][j]=Edge[i][j];
path[i][j]=-1;}//初始不經(jīng)過任何頂點
for(intk=0;k<n;k++)//產(chǎn)生dist(k)及path(k)for(i=0;i<n;i++) for(j=0;j<n;j++)if(dist[i][k]+dist[k][j]<dist[i][j]){
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=k;}//縮短路徑,繞過k到j(luò)
}//floyd
算法12--最短路徑--弗洛伊德(Floyd)算法146.算法分析:設(shè)最內(nèi)層循環(huán)體為基本操作,算法有三層循環(huán),每層循環(huán)n次,所以T(n)=O(n3)
算法12--最短路徑--弗洛伊德(Floyd)算法15算法12--最短路徑--弗洛伊德(Floyd)算法
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人食堂承包協(xié)議書
- 單片機原理與應(yīng)用練習題與參考答案
- 人防租賃轉(zhuǎn)讓合同范本
- 熱工基礎(chǔ) 模擬試題
- 萬年牢說課稿
- 一周學(xué)習總結(jié)
- 一防水合同范例
- 兼職定金合同范本
- 《荊棘鳥》讀書心得
- 制作甲方合同范本
- GB/T 25146-2010工業(yè)設(shè)備化學(xué)清洗質(zhì)量驗收規(guī)范
- GB/T 2007.1-1987散裝礦產(chǎn)品取樣、制樣通則手工取樣方法
- 交流課:資本主義世界市場的形成
- 城市社會學(xué)(2015)課件
- 年產(chǎn)2萬噸馬來酸二乙酯技改建設(shè)項目環(huán)評報告書
- 中國古代文論教程完整版課件
- 中班美工區(qū)角活動教案10篇
- SJG 103-2021 無障礙設(shè)計標準-高清現(xiàn)行
- 皇冠假日酒店智能化系統(tǒng)安裝工程施工合同范本
- 路面工程重點、關(guān)鍵、和難點工程的施工方案(技術(shù)標)
- 合肥市城市大腦·數(shù)字底座白皮書2020
評論
0/150
提交評論