最短路徑-弗洛伊德算法

整理自《數(shù)據(jù)結(jié)構(gòu)高分筆記》

1、算法思想

迪杰斯特拉算法可以得到從圖中某一頂點到圖中其余每個頂點的最短路徑。如果只要求算圖中任意一對頂點間的最短路徑,則通常用弗洛伊德算法。

關(guān)于弗洛伊德算法的原理,我們直接通過一個例子來體會一下:

上圖中對應(yīng)的鄰接矩陣為:

初始時要設(shè)置兩個矩陣A和Path,A用來記錄當前已經(jīng)求得的任意兩個頂點的最短路徑長度,Path用來記錄當前兩頂點間最短路徑上要經(jīng)過的中間頂點。

初始時:A和Path如下所示:

第一步
以0作為中間點,參照上一步矩陣的結(jié)果,檢測所有結(jié)點對,假設(shè)當前所檢測的頂點對為(i,j),如果A[i][j]>A[i][0] + A[0][j],則將A[i][j]改為A[i][0] + A[0][j]的值,并將Path[i][j]改為0.經(jīng)過本次檢測和修改,所得矩陣如下:

第二步
以1為中間節(jié)點,參照上一步矩陣的結(jié)果,檢測所有結(jié)點對,其中有:A[0][2]>A[0][1] + A[1][2]=9,所以將A[0][2]改為9,Path[0][2]改為1:

第三步
以2為中間節(jié)點,參照上一步矩陣的結(jié)果,檢測所有結(jié)點對,進行修改。

第四步
以3為中間節(jié)點,參照上一步矩陣的結(jié)果,檢測所有結(jié)點對,進行修改。

經(jīng)過上面的步驟,得到的最終的矩陣為:

由矩陣A可以得到圖中任意兩點之間的最短路徑長度,以及最短路徑所經(jīng)過的結(jié)點。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 圖的概念 圖是一種非線性的數(shù)據(jù)結(jié)構(gòu),一個圖中有兩類東西,一種是結(jié)點,一種是邊.我們用V這個集合來表示節(jié)點(vert...
    fredal閱讀 2,430評論 2 14
  • 第一章 緒論 什么是數(shù)據(jù)結(jié)構(gòu)? 數(shù)據(jù)結(jié)構(gòu)的定義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 第二章...
    SeanCheney閱讀 5,986評論 0 19
  • 最短路徑算法在現(xiàn)實生活中也具有非常多的應(yīng)用,例如在一個復雜的景區(qū),想要從一個景點到另外一個景點,利用最短路徑算法就...
    鄭明明閱讀 1,893評論 0 6
  • Floyd 算法 簡介 Floyd 算法又稱為插點法,是一種利用動態(tài)規(guī)劃的思想尋找給定的加權(quán)圖中多源點之間最短路徑...
    廖少少閱讀 8,887評論 0 1
  • 貪心算法 貪心算法總是作出在當前看來最好的選擇。也就是說貪心算法并不從整體最優(yōu)考慮,它所作出的選擇只是在某種意義上...
    fredal閱讀 9,421評論 3 52

友情鏈接更多精彩內(nèi)容