HDOJ 1874 最短路問題

2021-06-27 08:07:19 字數 695 閱讀 5931

題目大意:輸入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演算法 每次擴充套件乙個距離最短的節點,更新與其相鄰點的距離。當所有邊權都為正時,由於不會存在乙個距離更短的沒有擴充套件的點,所以這個點的距離不會在改變,保證了演算法的正確性。演算法步驟如...