假設構建的是一副無向圖
圖中有0~6 7個點,每段線表示從乙個點到另乙個點的值
dijkstra演算法的目的是找到乙個點到另乙個點的最短路徑
假設已經構建好了圖的關係,並選取了起始點a1
思路:初始化兩個點集合s和u,s包括起點a1,u包括剩餘點,遍歷計算s中點到u中點的最短距離,不相鄰/連線的距離為∞;
上一步計算得到u集中所有點的距離,從u中選出最短距離點k,從u集中移動到s集中;
重複上述1和2的步驟,至u為空。
我們假設輸入為 n 個點,並輸入m個關係,先假設每個關係之間無向,然後連續輸入m個點的關係。最後輸入乙個點,求出到其他點的具體距離。
輸入樣例
7 12
0 1 12
0 5 16
0 6 14
1 2 10
1 5 7
2 3 3
2 4 5
2 5 6
3 4 4
4 5 2
4 6 8
5 6 1000
0
#include
#include
#include
using
namespace std;
intmain()
cin >> s;
vector<
int>
dis(n,
1000000);
deque<
int> u;
deque<
int> end;
end.
push_back
(s);
dis[s]=0
;for
(int i =
0; i < n; i++
)while
(u.size()
>0)
}}}int min_dis =
1000000
;int index =0;
// 找最小的下標
for(
int i =
0; i < u.
size()
; i++)}
end.
push_back
(u[index]);
u.erase
(u.begin()
+ index);}
for(
int i =
0; i < dis.
size()
; i++)}
return0;
}
輸出
Dijkstra演算法學習
dijkstra演算法是求解有向圖最短路徑的經典演算法,計算從乙個指定的初始結點到其他各個結點最短路徑。它的理論基礎就是一條最短路徑的子路徑也一定是最短的。實現如下 將所有結點分為兩個集合,乙個命名為s集,乙個命名為u集。s集中的點是我們已知其最短路徑的點,u集中的點是我們還未知其最短路徑的點。因此...
Dijkstra演算法 學習筆記
dijkstra演算法用於求最短路徑,原理的話可以去網上搜搜,有一些講得還是比較清楚的。筆者是在學opencv的時候接觸到的,不過 寫出來似乎跟c 關係比較大,無妨,會用就好。感謝轉 最短路徑 dijkstra演算法和floyd演算法 和原 dijkstra演算法 matlab 這兩篇博文的作者。本...
dijkstra演算法學習筆記
dijkstra是一種單源最短路徑演算法,即求乙個點到其他點的最短路。不能處理負邊權。最近某種廣為人知的演算法頻繁被卡,讓dijkstra逐漸成為了主流,甚至在初賽中鞭屍了spfa dijkstra效率還是不錯的,而且不容易被卡。用dis陣列儲存最短路徑。初始化時,dis s 設定為0 s為起點 其...