dijkstra雙層圖的一種解決方法

dijkstra雙層圖的一種解決方法

Original Ideas and similar code from here

  • 基礎建立在堆優化dijkstra(保留vis數組)之上
  • 在單層圖的情況下,我們可以在dijkstra()函數之外建立一個數組d,d[x]用於保存從出發點到x點的距離大小
  • 在dijkstra求距離之前置出發點的距離爲0
  • 在雙層圖的情況下需要做出的改變:
  1. 存距離大小時仍使用數組d,但要開成d [點的個數n] [第二層圖的邊數]
  2. 存邊時對兩層圖在存邊的屬性的結構體中增加一個flag(mark/etc.)變量對兩層圖進行區分
  3. 建圖時在存點的屬性的結構體中增加一個k變量用於記錄第二層圖走過的邊數
  4. 求最小距離時對隊列彈出的結構體t存儲的距離不符合d[對應的點][對應的第二層走過的邊數]時直接continue
  5. 求最小距離時存入隊列的結構體tt(以把存點的屬性的結構體傳入爲例):
    …如果當前邊是第二層圖,tt.k = t.k + 1; 否則 tt.k = t. k
    …tt存儲的距離 = 當前d[對應的點][對應的第二層走過的邊數]

(以下內容沒有經過實踐檢驗,慎用)

  • x層圖則把d開成x維數組,需要的標記變量也在結構體中添上
  • (但是 空間複雜度n*m^k,(n對應點數,m爲從第二層開始每層圖的可用邊數,k爲圖的層數-1),圖的層數多而且邊又多的情況下空間應該會炸的非常慘)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章