HDU 1874 畅通工程续【最短路径】
来源:互联网 发布:知乎 如何提问 编辑:程序博客网 时间:2024/05/22 03:29
这道题有坑,两城市之间可能有多路径,在最初录入路径的时候选择权值最小的那条。
迪杰斯特拉算法:
#include<stdio.h>#include<string.h>const int maxint = 200000000;bool s[210];int path[210];int d[210];int arcs[210][210];int S,T,M,N;int shortestpath_dij(int v0,int vi){ int n=N; int i,v,w; for(v=0; v<n; v++) { s[v]=false; d[v]=arcs[v0][v]; if(d[v]<maxint)path[v]=v0; else path[v]=-1; } s[v0]=true; d[v0]=0; for(i=1; i<n; ++i) { int min0=maxint; for(w=0; w<n; w++) { if(!s[w] && d[w]<min0) { v=w; min0=d[w]; } } s[v]=true; for(w=0; w<n; w++) if(!s[w] && (d[v]+arcs[v][w]<d[w])) { d[w]=d[v]+arcs[v][w]; path[w]=v; } } return d[vi];}int main(){ int a,b,lenth; while(scanf("%d %d",&N,&M)!=EOF) { for(int i=0; i<N; i++) for(int j=0; j<N; j++) arcs[i][j]=maxint; for(int i=0; i<M; i++) { scanf("%d %d %d",&a,&b,&lenth); if(lenth<arcs[a][b]) arcs[a][b]=arcs[b][a]=lenth; } scanf("%d %d",&S,&T); int ans=shortestpath_dij(S,T); if(s[T]==true) printf("%d\n",ans); else printf("-1\n"); } return 0;}
弗洛伊德算法:
#include<stdio.h>#include<string.h>const int maxint = 0x3f3f3f;int path[210][210];int d[210][210];int S,T,M,N;int shortestpath_floyed(int v0,int vi){ int n=N; for(int i=0; i<n; i++) for(int j=0; j<n; j++) { if(d[i][j]<maxint)path[i][j]=i; else path[i][j]=-1; } for(int k=0; k<n; k++) for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(d[i][k]+d[k][j]<d[i][j]) { d[i][j]=d[i][k]+d[k][j]; path[i][j]=path[k][j]; } return d[v0][vi];}int main(){ int a,b,lenth; while(scanf("%d %d",&N,&M)!=EOF) { for(int i=0; i<N; i++) for(int j=0; j<N; j++) if(i==j)d[i][j]==0; else d[i][j]=maxint; for(int i=0; i<M; i++) { scanf("%d %d %d",&a,&b,&lenth); if(lenth<d[a][b]) d[a][b]=d[b][a]=lenth; } scanf("%d %d",&S,&T); int ans=shortestpath_floyed(S,T); if(ans>=0 && ans<maxint) printf("%d\n",ans); else printf("-1\n"); } return 0;}
0 0
- hdu 1874 畅通工程续 dij_最短路径
- HDU 1874 畅通工程续 最短路径
- HDU 1874 畅通工程续 (最短路径)
- HDU 1874 畅通工程续【最短路径】
- 【最短路径dijkstra算法】HDU 1874---畅通工程续
- 【最短路径spfa算法】HDU 1874---畅通工程续
- hdu 1874 畅通工程续(最短路径)
- hdu 1874畅通工程再续(最短路径)
- hdu-1874 畅通工程续 最短路径问题
- [最短路径] HDU 1874 - 畅通工程续
- (最短路径 Dijkstra)HDU 1874 畅通工程续
- hdu 1874畅通工程续+2544最短路+3790最短路径(dijkstra算法入门题)
- 畅通工程续 最短路径 Dijkstra
- hdu1874 最短路径 畅通工程续
- 畅通工程续(最短路径)
- 畅通工程续 最短路径问题
- 【最短路径】畅通工程续
- (step6.2.2)hdu 1874(畅通工程续——最短路径)
- Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解
- 腾讯前端题面试题(一)及答案
- Longest Palindrome - UVa 11151 dp
- 上一级下一级的排序
- 算法导论习题解-第21章用于不相交集合的数据结构
- HDU 1874 畅通工程续【最短路径】
- Linux上安装和卸载jdk
- HDU 1498 50 years, 50 colors
- 最小生成树(prim算法)
- vs 2012 Boost 库安装过程与实例
- C# 用ToolStripDropDown实现任意Windows控件弹出显示
- leetcode 虐我篇之(三)Remove Duplicates from Sorted List
- Android 注册广播的两种方式区别
- 请问Delphi调用VC写的dll,有传入和传出参数都是unsigned char*运行中有有关问题