最短路徑問題之Dijkstra演算法趣解

2021-10-03 23:23:55 字數 2282 閱讀 5243

下面就開始正文咯咯~

首先嘛,要學習演算法,就得要了解它解決的是什麼問題。

某個人叫dijkstra,身患重度懶癌,但卻嗜吃如命,在原點(家中)的他,想知道到達其他各個美味鋪子的最近的路線。

之後就可以告訴外賣小哥以便他們能更快送達。

這個人雖然懶,但是他卻很有錢。要知道,有錢能使鬼推磨~。

而且不可多得是的他還有乙個聰明的小腦瓜。

下面就來看看他是怎麼靈活的運用他的財力及智力,來實現他的「驚天計畫」。

金主「dijkstra」買了幾輛叫「廣度優先搜尋」的超級跑車,讓自己的計畫能夠順利進行。畢竟「工欲利其事必先利其器」。

然後,他還搞到了一張地圖,標有距離。

他將手下大致上分為兩組,記錄組行動組

記錄組又在內部被細分成三組:

dis組記錄原點到其他鋪子的最短距離。

當然,在行動開始前,他們只記錄著原點直接能到達的距離。其他的被寫為無窮,在行動中這些資料會不斷被更新。

t組:用來記錄已經求出最短路徑的鋪子編號。這組可以告訴我們行動何時停止。

而行動組也被分成六組。一組在家中,其他組被分配在每個鋪子的標記點,鋪子編號即是組名,每個鋪子的「出度」是多少就分配幾人,伺機而動。

一切安排妥當之後,他向手下講述他的行動方案:

行動組從一組開始,通過無線電詢問dis組中的最小值,即去某一目標鋪子的最短路徑。(已走過的路就不必再走)。但是dis的回答,每組都會聽到。

比如說,

1組開始行動,先詢問dis組:「目前未走過的最短路徑是多少?」

dis組的負責人告訴他「是你去3號鋪的10」,那麼他就開上超跑奔襲10,去3號鋪。到達之後,告訴t組的負責人:「去3號鋪的最短路徑已經知道,加以標記「。他還會告訴o組,」3號鋪的源方向為1(即家中)「。這條路徑成為了確定值。(當然,t,o組的值都會在行動過程中不斷被更新)

因為每一段距離都是正值,而且起始條件為最短,所以不可能通過第三個點中轉,使得去3號的距離更短。

1組的人去了3號鋪之後,3組的人就知道這時候該他們行動了。

與1組的行動不同的是,他們首先要做的是,先將自己能直接到達的路徑及其長度告知dis組,要注意的是,dis組記錄的永遠是從原點到某一點的距離,因此,dis組更新資料如下,

之後,3組再向dis組的負責人詢問:「目前未走過的最短路徑是多少?「

dis組的人告訴他:「是從家中到5號鋪的30」,這時,1組的人就會開上另一輛超跑,去向5號鋪。到了之後讓t組及o組更新資料。然後5組行動前,dis如下

每組的行動都是如此,大致分為三步:

1、告知自己可選擇的路,讓dis組更新資料。

2、根據dis組所給的最短路徑,對應路徑的小組開始行動。

3、每組行動結束之後,告知t組及o組,更新資料。

等到那黑雲慢慢蠶食了明月。行動進行~

下面是其他組行動時 的dis組的階段更新資料:

此時t組負責人告知全部成員行動結束。

t					  dis

起點 終點 最短路徑 長度

v1 v2 無 ∞

v3 10

v4 5

v5 30

v6 60

如果有理解有偏差的地方,希望大家能批評指正。

最後希望大家都未來可期~。

最短路徑問題(Dijkstra)

一 基本概念 從起點出發找一條到達目的地的 邊權和最小的路徑,這就是單元最短路問題。在最短路問題中,給出的是乙個有向加權圖g v,e 邊的權值是某種物理物件的度量標準,不一定是距離,它可以是時間,金錢,罰款,損失或任何其他路徑線性積累的數量形式。路徑p v0,v1,vk 的權是指其組成邊的所有權值之...

最短路徑問題 dijkstra

description 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 輸入檔案short.in,共有n m...

最短路徑問題(Dijkstra)

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,...