單源最短路 Dijkstara演算法

2022-05-04 20:57:09 字數 864 閱讀 1267

演算法基本思想:每次找到離源點最近的乙個頂點,然後以該頂點為中心進行擴充套件,最終得到源點到其餘所有點的最短路徑。

1、將所有的頂點分為兩個部分:已知最短路程的頂點集合p和未知最短路徑的頂點集合q

2、設定源點s到自己的最短路徑為0,若存在有源點能夠直接到達的頂點i則吧dis[i]設定為e[s][i]。同時把所有其它不能直接到達的頂點的最短路徑設定為∞

3、在集合q的所有頂點中選擇乙個離源點s最近的頂點u即dis[u]最小,加入到集合p。並考察所有以點u為起點地邊,對每條邊進行鬆弛操作。

4、重複第三步,直到集合q為空,演算法結束。最終dis陣列中的值就是源點到所有頂點的最短路徑。

//

dijketra演算法

intmain()

//初始化dis陣列,這裡是1號頂點到其餘各個頂點的初始路程。

for (i = 1; i <= n; i++)

dis[i] = e[1

][i];

//book陣列初始化,book陣列用來記錄當前點是否被訪問,訪問1 else0

for (i = 1; i <= n; i++)

book[i] = 0

; book[

1] = 1;//

一號頂點標記

//核心演算法

for (i = 1; i <= n - 1; i++)

}book[u] = 1;//

標記當前點被訪問

for (v = 1; v <= n; v++)}}

//輸出結果

for (i = 1; i <= n; i++)

getchar(); getchar();

return0;

}

單源最短路徑問題 Bellman Ford演算法

講真,剛看到這個演算法的時候我一臉懵逼,這是什麼鬼,不過這也正常,大部分時候我看到乙個新的演算法總是一臉懵逼 笑 不過這沒什麼,像三體裡說的 弱小和無知不是生存的障礙,傲慢才是 所以,好好學就ok啦 說了那麼多廢話,接下來進入正題啦!所謂最短路問題是圖論中最基礎的問題,是給定兩個點,在以這2個點為起...

單源最短路

題目描述 給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。輸入第一行包含三個整數n m s,分別表示點的個數 有向邊的個數 出發點的編號。接下來m行每行包含三個整數fi gi wi,分別表示第i條有向邊的出發點 目標點和長度。輸出n行,每行n個用空格分隔的整數,其中第i個整數表示從點s出發...

單源最短路

恢復內容開始 dijkstra spfa floyd多源變單源 熱浪 模板題 使用spfa過 spfa 從佇列中取出點進行鬆弛操作 使用st記錄點是否還在佇列中 如果這個點本來就存在佇列中那麼就重複加入點了void spfa int s 信使 廣播式求時間 求廣播所有點的最短時間 每個點接受到向他的...