标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12278 Accepted Submission(s):
3986
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #define inf 0x3f3f3f3f 5 #define M 1005 6 using namespace std; 7 int map[M][M],vis[M],dis[M]; 8 int main() 9 { 10 int i,j,n,m,s; 11 while(~scanf("%d%d%d",&n,&m,&s)) 12 { 13 memset(vis,0,sizeof(vis)); 14 memset(dis,0,sizeof(dis)); 15 for(i=0; i<=n; i++) 16 for(j=0; j<=n; j++) 17 { 18 if(i==j) map[i][j]=0; 19 else map[i][j]=inf; 20 } 21 int a,b,c; 22 for(i=0; i<m; i++) 23 { 24 scanf("%d%d%d",&a,&b,&c); 25 if(map[a][b]>c) 26 map[a][b]=c; 27 } 28 int w,q; 29 scanf("%d",&w); 30 for(i=0; i<w; i++) 31 { 32 scanf("%d",&q); 33 map[0][q]=0; //将0作为起点! 34 } 35 for(i=0; i<=n; i++) 36 dis[i]=map[0][i]; 37 vis[0]=1; 38 int min,t; 39 for(i=1; i<=n; i++) 40 { 41 min=inf; 42 for(j=1; j<=n; j++) 43 if(!vis[j]&&min>dis[j]) 44 { 45 min=dis[j]; 46 t=j; 47 } 48 vis[t]=1; 49 for(j=1; j<=n; j++) 50 if(!vis[j]&&map[t][j]<inf) 51 if(dis[j]>dis[t]+map[t][j]) 52 dis[j]=dis[t]+map[t][j]; 53 } 54 if(dis[s]<inf) 55 printf("%d\n",dis[s]); 56 else 57 printf("-1\n"); 58 } 59 return 0; 60 }
hdu 2680 Choose the best route
标签:
原文地址:http://www.cnblogs.com/pshw/p/5429920.html