題目大意:輸入n,m,分別表示有編號(0~n-1)n個城鎮和m調街道,接下來輸入m條道路及其所花費的時間,之後輸入起點和終點,最後求出從起點到終點所花費的最短時間。
演算法思想:
迪傑斯特拉演算法
1.根據輸入資訊建立鄰接矩陣,為無向圖。此處需要注意會有道路覆蓋的問題,此時應用花費時間最小的道路。
2.用dis陣列儲存從原點到其它節點的最短距離,進行初始化。
3.使用優先佇列找出最小的權值去d[u],然後對所有與u鄰接的頂點進行更新,直至隊列為空時結束。
4.判斷到路是否存在若存在輸出最小花費時間。
**如下:
#include #include #include #include using namespace std;
const int infinmax=0xfffffff;
int c[205][205];//鄰接矩陣,儲存無向圖
int d[205];//記錄源節點距離其他節點的最小距離
int vis[205];//源點集合
void dijstra(int n,int s,int t) }}
if(d[t]!=infinmax) cout<>n>>m)
cin>>s>>t;
dijstra(n,s,t);
}return 0;
}
hdoj1874 暢通工程續
dijsktra演算法 偽 清除所有標記 d 0 0,其他d i intmax for 1到n dijkstra演算法的應用 include using namespace std const int max 201 const int intmax 10000000 int map max max...
HDOJ1874 暢通工程續
題目鏈結 求單源最短路的題,因為邊權非負,所以可以用dijkstra。這題有一點需要注意的地方是有重邊,在讀資料時取較小的即可。view code 1 include 2 include 3 define min a,b a 4 define n 200 5 define inf 2000000 6...
hdoj1874 (優先佇列 Dijkstra)
hdoj1874 分析 一看題目,就是求最短路,這道題用的是dijkstra 優先佇列。先說一下dijkstra演算法 每次擴充套件乙個距離最短的節點,更新與其相鄰點的距離。當所有邊權都為正時,由於不會存在乙個距離更短的沒有擴充套件的點,所以這個點的距離不會在改變,保證了演算法的正確性。演算法步驟如...