标签:
1 2 2 3 1 1 3 1 2 1 0 1 1 2 1 2 7 2 1 8 2 2 9 2 3 4 0 1 1 5 2 1 6 3 1 6 0
10
1 #include<stdio.h> 2 #include<string.h> 3 #define max 9999999 4 5 int map[500][500]; 6 int vis[500],dis[500]; 7 int sum; 8 9 void dijkstra(int cost[][500],int n) 10 { 11 int i,j,k,minc; 12 memset(vis,0,sizeof(vis)); 13 dis[0]=0; 14 vis[0]=1; 15 for(i=1;i<n;i++)dis[i]=cost[0][i]; 16 for(i=1;i<n;i++) 17 { 18 minc=max; 19 for(j=0;j<n;j++) 20 if(!vis[j]&&dis[j]<minc) 21 { 22 minc=dis[j]; 23 k=j; 24 } 25 if(minc==max) 26 break; 27 vis[k]=1; 28 for(j=0;j<n;j++) 29 if(!vis[j]&&dis[j]>dis[k]+cost[k][j]) 30 { 31 dis[j]=dis[k]+cost[k][j]; 32 } 33 } 34 // for(i=0;i<n;i++) 35 // printf("%d ",dis[i]);dis[]保存到每一个点的最短路 36 printf("%d\n",dis[n-1]); 37 } 38 int main() 39 { 40 //freopen("a.txt","r",stdin); 41 int t,n,city[50]; 42 int s,e,l,j,i,tot; 43 scanf("%d",&t); 44 while(t--) 45 { 46 scanf("%d",&n); 47 city[0]=0,city[1]=1; 48 sum=0; 49 tot=2; 50 for(i=2;i<=n+1;i++) 51 { 52 scanf("%d",&city[i]); 53 tot+=city[i]; 54 } 55 for(i=0;i<tot;i++) 56 for(j=0;j<tot;j++) 57 { 58 map[i][j]=max; 59 } 60 for(i=2;i<=n+2;i++) 61 { 62 sum+=city[i-2]; 63 while(scanf("%d",&s)==1&&s) 64 { 65 scanf("%d%d",&e,&l); 66 map[sum+s-1][sum+city[i-1]+e-1]=l; 67 } 68 } 69 70 dijkstra(map,tot); 71 } 72 return 0; 73 }
标签:
原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4189118.html