最短路径 dijkstra
2013-08-12 16:59
344 查看
最短路径 dijkstra
#include <stdio.h> #include <string.h> #include <limits.h> #define MAX INT_MAX #define N 100 int map ; int len ; int vis ; int n; void build() { int i, j; int u, v, c; int m; scanf("%d", &n); memset(map, -1, sizeof(map)); scanf("%d", &m); while(m--) { scanf("%d%d%d", &u, &v, &c); map[u][v] = c; } // scanf("%d", &s); } void dij() { int min; int i, t; memset(vis, 0, sizeof(vis)); for(i = 0; i <= n; i++) len[i] = MAX; len[0] = 0; while(1) { min = n; for(i = 0; i < n; i++){ if(vis[i]) continue; if(len[i] < len[min]) min = i; } if(min == n) break; printf("min = %d\n", min); vis[min] = 1; for(i = 0; i < n; i++) { if(vis[i] || map[min][i] == -1) continue; t = len[min] + map[min][i]; if(len[i] > t) len[i] = t; } } } void show() { int i, j; for(i = 0; i < n; i++) { for(j = 0; j < n; j++) printf("%-5d", map[i][j]); printf("\n"); } printf("\n\n"); for(i = 0; i < n; i++) printf("%d, ", len[i]); printf("\n\n"); } int main(int argc, char const *argv[]) { freopen("duan","r",stdin); build(); dij(); show(); return 0; } /* 6 8 0 5 100 0 2 10 0 4 30 1 2 5 2 3 50 3 5 10 4 3 20 4 5 60 */
相关文章推荐
- Dijkstra不能得到含有负权边图的单源最短路径
- hdu 3790 最短路径问题(Dijkstra)
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- [贪心]Dijkstra最短路径算法
- HDU 3790 最短路径问题 裸跑dijkstra
- 最短路径 【Dijkstra】
- HDU 3790 最短路径问题 (dijkstra+路长和权值)
- zoj 1891 - 传说中的简答题 - 最短路径 - dijkstra
- hdoj-1869 六度分离【最短路径--dijkstra&&spfa&&floyd】
- HDU -- 3790 最短路径问题 (Dijkstra+priority_queue)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
- HDU 6166 2017多校 Team09 1006:Dijkstra顶点子集最短路径
- hdu1548 A strange lift(bfs 或Dijkstra最短路径)
- dijkstra_最短路径_hdu_3790
- 关于用Dijkstra求最短路径的学习小结(附上源码)
- 九度1008:最短路径问题(Dijkstra)
- boost dijkstra 获得两点直接的最短路径
- hdu 2544 单源最短路径(邻接矩阵Dijkstra实现)
- 网络中两点最短路径 Dijkstra 算法