HDU 1874 畅通工程续(Dijkstra算法求最短路径)
2016-12-05 21:00
459 查看
dijkstra模板题,直接求出e到s最短路即可
注意输入时可能多条边,保证最小路径输入
(并不知道我为啥要用Kruskal。。感觉弄混了呜呜呜)
注意输入时可能多条边,保证最小路径输入
(并不知道我为啥要用Kruskal。。感觉弄混了呜呜呜)
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int N = 210; const int INF = 1 << 30; int n, m; int map , vis , dis ; int dijkstra(int s, int e){ for(int i = 0; i < n; i++) { dis[i] = map[s][i]; vis[i] = 0; } dis[s] = 0; vis[s] = 1; for(int i = 0; i < n; i++){ int x, m = INF; for(int j = 0; j < n; j++){ if(!vis[j] && dis[j] <= m){ m = dis[j]; x = j; } } vis[x] = 1; for(int j = 0; j < n; j++){ if(!vis[j]){ dis[j] = min(dis[j], dis[x] + map[x][j]); } } } if(dis[e] == INF) return -1; else return dis[e]; } int main(){ while(~scanf("%d %d", &n, &m)){ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ map[i][j] = (i == j ? 0 : INF); } } int u, v, w; for(int i = 1; i <= m; i++){ scanf("%d %d %d", &u, &v, &w); if(w < map[u][v]){ map[u][v] = map[v][u] = w; } } int s = 0, e = 0; scanf("%d %d", &s, &e); int ans = dijkstra(s, e); printf("%d\n", ans); } } /* 3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2 */
相关文章推荐
- 【最短路径dijkstra算法】HDU 1874---畅通工程续
- HDU 1874.畅通工程续【最短路径(Dijkstra算法)】【4月14】
- hdu 1874 畅通工程续(两点最短路径,spfa&&floyd)
- HDU 1874 畅通工程续(单源最短路径)
- HDU 1874 畅通工程续【最短路径】
- hdu-1874 畅通工程续 最短路径问题
- HDU-1874 畅通工程续 (最短路径启蒙题)
- HDU - 1874 畅通工程续(最短路径)
- 最短路径——Hdu-1874 畅通工程再续
- hdu 1874 畅通工程续(最短路径)
- hdu 1874 畅通工程续 dij_最短路径
- hdu1874 畅通工程续(求最短路径)
- HDU 1874 畅通工程续 (最短路径)
- [最短路径] HDU 1874 - 畅通工程续
- hdu 1874畅通工程再续(最短路径)
- hdu1874——畅通工程续(最短路径)
- 畅通工程续(1874)hdu最短路径算法—Floyd
- hdu 1874 畅通工程续(最短路径)
- HDU 1874 畅通工程续 最短路径入门(dijkstra)
- (step6.2.2)hdu 1874(畅通工程续——最短路径)