dijkstra

微信截圖_20200525173649.png

如圖所示鞭呕,dijkstra算法需要的幾個關(guān)鍵變量如下:

visited: 標識已經(jīng)被訪問過的節(jié)點宛官,即該節(jié)點的所有鄰接節(jié)點都已探索過了。
初始化時是空列表 [ ]腋么,之后不斷向里面添加訪問過的節(jié)點
unvisit: 標識未被訪問的節(jié)點亥揖,也是即將要被訪問的節(jié)點圣勒,需要按鏈路距離逐層添加摧扇。
初始化時是只有源節(jié)點的列表 [ src ] ,之后按其到源節(jié)點的鏈路距離逐個添加扛稽。
鏈路距離表示兩節(jié)點的跳數(shù)。如A到C的鏈路距離為2.
如圖用含,如果規(guī)定A為源節(jié)點帮匾,則由A首先探索其鄰接節(jié)點B,D瘟斜,此時unvisit = [ B , D ],(注明未,A已經(jīng)被拿來探索了壹蔓,所以已經(jīng)被pop出了unvisit列表),然后下一個循環(huán)佣蓉,從 unvisit中pop出B, 探索B的鄰接節(jié)點,并加入到unvisit中疚膊,此時unvisit = [ D, E, C ]虾标。

一個如圖的結(jié)構(gòu)體
typedef result{
int vertex;
float dis;
int preVertex;
}
則一個保存源節(jié)點到所有節(jié)點的距離和前驅(qū)節(jié)點的列表 results = [ result1, result2,...]
通過不斷探索,不斷更新最短路徑和前驅(qū)節(jié)點璧函,即可計算全圖的最短路徑。

最后附上python 代碼:

def dijkstra(graph, src):
    visited = []
    unvisited = [ src ]
    shortestDis = [ INT_MAX for i in range(vertexNum)]
    shortestDis[src] = 0
    preVertex = [None for i in range(vertexNum)]
 
    while unvisited:
        vertex = unvisited.pop(0)
        for i in range(vertexNum):
            if graph[vertex][i] < INT_MAX and i not in visited:
                if i not in unvisit:
                    unvisited.append(i)
                tempDis = graph[vertex][i] + shortestDis[vertex]
                if tempDis < shortestDis[i]:
                    shortestDis[i] = tempDis
                    preVertex[i] = vertex
        visited.append(vertex)
                
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市库继,隨后出現(xiàn)的幾起案子窜醉,更是在濱河造成了極大的恐慌艺谆,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件读串,死亡現(xiàn)場離奇詭異撒妈,居然都是意外死亡,警方通過查閱死者的電腦和手機杰捂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門棋蚌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒿往,你說我怎么就攤上這事湿弦∪柯” “怎么了颊埃?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵班利,是天一觀的道長。 經(jīng)常有香客問我罗标,道長,這世上最難降的妖魔是什么皿哨? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任纽谒,我火速辦了婚禮如输,結(jié)果婚禮上央勒,老公的妹妹穿的比我還像新娘澳化。我一直安慰自己,他們只是感情好缎谷,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布列林。 她就那樣靜靜地躺著,像睡著了一般希痴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砌创,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天嫩实,我揣著相機與錄音,去河邊找鬼甲献。 笑死,一個胖子當著我的面吹牛撵溃,可吹牛的內(nèi)容都是我干的锥累。 我是一名探鬼主播缘挑,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼语淘,長吁一口氣:“原來是場噩夢啊……” “哼际歼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹅心,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旭愧,失蹤者是張志新(化名)和其女友劉穎宙暇,沒想到半個月后议泵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體占贫,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡型奥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年碉京,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坑匠。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡卧惜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咽瓷,到底是詐尸還是另有隱情,我是刑警寧澤闪朱,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布钻洒,位于F島的核電站,受9級特大地震影響素标,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寓免,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一计维、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲫惶,春花似錦、人聲如沸疾就。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猜敢。三九已至,卻和暖如春鼠冕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背懈费。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工博脑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泞边。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓疗杉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烟具。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354