标签:des style http os strong io 数据 for
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 29550 | Accepted: 9935 |
Description
Input
Output
Sample Input
5 5 1 2 20 2 3 30 3 4 20 4 5 20 1 5 100
Sample Output
90
Hint
Source
题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离
解题思路:模版题,这题要注意的是有重边,dijkstra的算法需要考虑下,bellman-ford和spfa可以忽略这个问题
代码:实验证明这道题的数据临界值是1000,我开1000的dis[0]没用,就挂了。。。无语。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; #define M 1005 #define INF 9999999 #define min(a,b) (a<b?a:b) int map[M][M],dis[M]; int m,n; void Dijkstra() { bool v[M]; int Min=INF,s,i,j; memset(v,0,sizeof v); map[0][1]=map[1][0]=0; //因为我要套模板啦,所以还是从0开始。 for(i=0;i<=n;i++) dis[i]=(i==0?0:INF); //白书就这么简单,不知道黄书怎么那么难。。。是等级不同吗 for(i=0;i<=n;i++) { Min=INF; for(j=0;j<=n;j++) if(!v[j] && dis[j]<Min) { Min=dis[j];s=j; } v[s]=1; for(j=0;j<=n;j++) dis[j]=min(dis[j],dis[s]+map[s][j]); } printf("%d\n",dis[n]); } int main() { int i,j; int a,b,z; scanf("%d%d",&m,&n); for(i=0;i<=n;i++) for(j=0;j<=n;j++) map[i][j]=(i==j?0:INF); while(m--) { scanf("%d%d%d",&a,&b,&z); map[a][b]=map[b][a]=min(map[a][b],z); } Dijkstra(); return 0; }
POJ 2387 Til the Cows Come Home (最短路+Dijkstra),布布扣,bubuko.com
POJ 2387 Til the Cows Come Home (最短路+Dijkstra)
标签:des style http os strong io 数据 for
原文地址:http://blog.csdn.net/qq2256420822/article/details/38374447