演算法設計與分析第二次作業(Floyd演算法)

2022-07-01 03:57:11 字數 1510 閱讀 4317

實驗報告

課程名稱

《演算法分析與設計》

實驗日期年月

日至年月

學生姓名

宣鑑超所在班級

計算機194         

學號

2019212212152          

實驗名稱

用floyd

演算法求解下圖各個頂點的最短距離

實驗地點

勤園13-208         

同組人員

宣鑑超用floyd演算法求解下圖各個頂點的最短距離。寫出floyd演算法的偽**和給出距離矩

陣(頂點之間的最短距離矩陣),按實驗報告模板編寫演算法。

我們可以把上圖看成4個城市8條公路,公路上的數字表示這條公路的長短。請注意這些公路是單向的。

我們現在需要求任意兩個城市之間的最短路程,也就是求任意兩個點之間的最短路徑。這個問題這也被稱為「多源最短路徑」問題。

現在需要乙個資料結構來儲存圖的資訊,我們仍然可以用一-個4*4的矩陣(二維陣列e)來存

儲。比如1號城市到2號城市的路程為2,則設e[1][2]的值為2。2號城市無法到達4號城市,則設定e[2][4]的值為∞。另外此處約定乙個城市自 己是到自己的也是0,例如e[1][1]為0。

我們來想一想,根據我們以往的經驗,如果要讓任意兩點(例如從頂點a點到頂點b)之間的路程

變短,只能引入第三個點(頂點k),並通過這個頂點k中轉即a->k->b,才可能縮短原來從頂點a點到

頂點b的路程。那麼這個中轉的頂點k是1 ~n中的哪個點呢?甚至有時候不只通過乙個點,而是經過兩個點或者更多點中轉會更短,即a->k1-> k2b->或者a->k1->k...->k->i..->b

上圖中從4號城市到3號城市(4->3) 的路程e[4][3]原本是12。如果只通過1號城市中轉(4->1->3) ,路程將縮短為11 (e[4][1] e[1][3]=5 6=11)。其實1號城市到3號城市也可以通過2號城市中轉,使得1號到3號城市的路程縮短為5 (e[1][2] e[2][3]=23=5)。所以如果同時經過1號和2號兩個城市中轉的話,從4號城市到3號城市的路程會進一步縮短為10。通過這個的例子,我們發現每個頂點都有可能使

得另外兩個頂點之間的路程變短。

void floyd(){

for(中轉點從0到n-1遍歷)

for(起點從0到n-1遍歷)

for(終點從0到n-1遍歷)

若經過中轉點距離更小則更新距離

floyd演算法的核心就是三重巢狀for迴圈,所以時間複雜度為o(n³)

演算法分析第二次作業

1 問題 已知乙個有向圖或無向圖,其中的邊有權值,詢問點到點的最短距離 最短路問題 2 解析 floyd可以求圖中所有點到其他點的最短路,運用動態規劃的思想。任意節點i到j的最短路徑兩種可能 1 直接從i到j。2 從i經過若干個節點k到j。dis i j 表示節點i到j最短路徑的距離,對於每乙個節點...

第二次作業 APP分析

第一部分 調研,評測 上圖 2.存在的bug。3.bug的描述。4.選擇乙個朋友 使用者 進行採訪,並加以記載。4.1.介紹採訪物件的背景和需求。4.2.讓採訪物件使用該產品的功能。4.3.描述使用者使用這個產品的過程,使用者的問題解決了麼?軟體在資料量 介面 功能 準確度上各有什麼優缺點?使用者體...

第二次作業

execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...