标签:
5 8 5 1 2 2 1 5 3 1 3 4 2 4 7 2 5 6 2 3 5 3 5 1 4 5 1 2 2 3 4 3 4 1 2 3 1 3 4 2 3 2 1 1
1 -1代码1:反向考虑;求一次dijkstra即可。 530MS。#include<stdio.h> #include<string.h> #include<algorithm> #define INF 0x3f3f3f using namespace std; int map[1010][1010],low[1010],vis[1010],time; int n; int init() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) map[i][j]=0; else map[i][j]=INF; } } } void dijkstra(int x) { int min,i,j,next; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) { low[i]=map[x][i]; } vis[x]=1; for(i=2;i<=n;i++) { min=INF; for(j=1;j<=n;j++) { if(!vis[j]&&min>low[j]) { min=low[j]; next=j; } } if(min==INF) break; vis[next]=1; for(j=1;j<=n;j++) { if(!vis[j]&&low[j]>low[next]+map[next][j]) { low[j]=low[next]+map[next][j]; } } } } int main() { int i,a,b,c,w,m,s,beg; while(scanf("%d%d%d",&n,&m,&s)!=EOF) { time=INF; init(); for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); if(map[b][a]>c) //反向求;两车站间的用时最少的路。 map[b][a]=c; } dijkstra(s); scanf("%d",&w); for(i=0;i<w;i++) { scanf("%d",&beg); if(time>low[beg]) time=low[beg]; } if(time==INF) printf("-1\n"); else printf("%d\n",time); } return 0; }代码2:正向考虑,求一次dijkstra即可。 452MS。#include<stdio.h> #include<string.h> #include<algorithm> #define INF 0x3f3f3f using namespace std; int map[1010][1010],low[1010],vis[1010]; int n,m,s; int init() { for(int i=0;i<=n;i++) { for(int j=0;j<=n;j++) { if(i==j) map[i][j]=0; else map[i][j]=INF; } } } void dijkstra(int x) { int i,j,min,next; memset(vis,0,sizeof(vis)); for(i=0;i<=n;i++) { low[i]=map[x][i]; } vis[x]=1; for(i=0;i<=n;i++) { min=INF; for(j=0;j<=n;j++) { if(!vis[j]&&min>low[j]) { min=low[j]; next=j; } } vis[next]=1; if(min==INF) { break; } for(j=0;j<=n;j++) { if(!vis[j]&&low[j]>low[next]+map[next][j]) { low[j]=low[next]+map[next][j]; } } } } int main() { int i,a,b,c,w,beg; while(scanf("%d%d%d",&n,&m,&s)!=EOF) { init(); for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) { map[a][b]=c; } } scanf("%d",&w); for(i=0;i<w;i++) { scanf("%d",&beg); map[0][beg]=0; //设0到起点的距离为0; } dijkstra(0); if(low[s]==INF) printf("-1\n"); else printf("%d\n",low[s]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdoj 2680 Choose the best route
标签:
原文地址:http://blog.csdn.net/longge33445/article/details/47775837