最短路径(Dijkstra算法)也就是单源点问题!
2017-03-08 10:23
302 查看
/*Sample Input 5 5 1 2 20 2 3 30 3 4 20 4 5 20 1 5 100 Sample Output 90 */ #include<stdio.h> #include<string.h> #define N 1005 #define INF 0x3f3f3f bool s ; int d ; int path ;//辅助记录经过的路程 int map ;//边权值 int n,m; void Dijkstra(int v0) { int v,w,i; for(v=0;v<n;++v)//这里最好是从1开始,因为我们赋值时的结点都是从1开始的, { //弄不好就容易出问题!!! s[v]=false; d[v]=map[v0][v]; if(d[v]<INF) path[v]=v0; else path[v]=-1; } s[v0]=true; d[v0]=0; for(i=1;i<n;++i) { int min=INF; for(w=0;w<n;++w) { if(!s[w]&&d[w]<min) { v=w; min=d[w]; } } s[v]=true; for(w=0;w<n;++w) { if(!s[w]&&(d[v]+map[v][w])<d[w]) { d[w]=d[v]+map[v][w]; path[w]=v; } } } } void read() { int i,j; int a,b,x; memset(map,INF,sizeof(map)); for(i=0;i<m;++i) { scanf("%d%d%d",&a,&b,&x); if(x<map[a-1][b-1]) { map[a-1][b-1]=x; map[b-1][a-1]=x; } } } int main() { while(~scanf("%d%d",&n,&m)) { read(); Dijkstra(0); printf("%d\n",d[n-1]); } return 0; }
相关文章推荐
- 单源点最短路径问题(Dijkstra算法)
- Dijkstra算法(最短路径问题)
- 最短路径问题(Dijkstra算法)
- 单源加权图最短路径问题(权值非负)-Dijkstra算法
- 单源点最短路径----Dijkstra算法
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
- HDOJ---3790 最短路径问题[Dijkstra算法||SPFA]
- HDU3795-最短路径问题-Dijkstra算法
- 单源点最短路径Dijkstra算法的JAVA实现
- C++编程练习(11)----“图的最短路径问题“(Dijkstra算法、Floyd算法)
- 单源最短路径问题 Dijkstra算法
- 单源点最短路径Dijkstra算法的JAVA实现
- K最短路问题(单源点最短路径+A*算法)
- 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法
- 单源最短路径问题(Dijkstra算法)第五集
- 算法长度K最短路问题(单源点最短路径+A*算法)Strut2教程-java教程
- HDOJ---1874 畅通工程续[最短路径问题-Dijkstra算法]
- HDU3790-最短路径问题(dijkstra算法)
- HDU--3790:最短路径问题 (Dijkstra算法)
- hdu-3790-最短路径问题(dijkstra算法)