當前位置:首頁 » 操作系統 » 有向圖d演算法

有向圖d演算法

發布時間: 2023-03-07 20:15:47

① 用來求解加權有向圖的最短路徑的演算法是什麼演算法

單元最短路徑:
1.如果沒有負權環的稀疏圖,可以用SPFA,時間復雜度O(KM)
M是邊數,K是平均入隊列的次數
2.如果沒有負權環的稠密圖,建議用Dijkstra O(N^2),用二叉堆可優化到
O(NlogN),斐波那契堆編程復雜度太高,不易於實現
3.如果有負權環,可以嘗試floyd,O(n^3)

任兩點最短路徑:floyd較好實現,基於重標號johnson也不錯(稀疏圖效率高)
具體程序可以上網查

② 已知帶權有向圖如圖7-29所示,請利用Dijkstra演算法從頂點V4出發到其餘頂點的最短路

初始化d[i]為無窮大,由於從v4開始,所以將d4=0,標記v4已選擇。
下面開始Dijkstra演算法:
和v4相連的且未標記的點有v2和v6,這樣更新d2=20,d6=15,選擇未標記所有點中最小的d6=15,標記v6已選擇,這樣我們算出了v4->v6最短距離d6=15;
從v6開始,和v6相連的且未標記的是v2,此時算d6+6=21>20,所以不更新d2,選擇未標記所有點中最小的d2=20,標記v2已選擇,這樣算出了v4->v2最短距離d2=20;
從v2開始,和v2相連的且未標記的有v1和v5,d1=d2+10=30,d5=d2+30=50,選擇未標記所有點中最小的d1=30,標記v1已選擇,這樣我們算出了v4->v1最短距離d1=30;
從v1開始,和v1相連的且未標記的有v3,d3=d1+15=45,選擇剩下沒被選的所有點的最小的d3=45(d5=50),標記v3已選擇,這樣我們算出了v4->v3最短距離d3=45
從v3開始,沒有出去的路徑,不更新距離,選擇剩下沒被選的所有點的最小的d5=50,標記v5已選擇,這樣我們算出了v4->v5最短距離d5=50.
此時所有的點都被訪問,結束。
註:上面的標記點已選擇注意下,在演算法的實現中用的是將所有的點放入隊列中,一旦一個點被選擇就是說求出了最短距離,就從此隊列刪除該點,一直到此隊列為空,結束演算法,我寫標記只是為了方便理解。
希望能幫你清晰了解Dijkstra演算法,圖論中很重要的演算法之一。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:595
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:889
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:583
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:766
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:687
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1015
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:258
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:117
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:808
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:715