首页 > 代码库 > hdu2066 一个人的旅行 最短路

hdu2066 一个人的旅行 最短路

单源最短路裸题

技术分享
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define min(a,b) (a)<(b)?a:b
 4 #define INF 100001
 5 int T,S,D,dist[1050],v[1050][1050],m,l[1050],r[1050];
 6 
 7 void DIJKSTRA(int x){
 8     int i,j,mi,minj;
 9     bool visit[1050]={0};
10     for(i=1;i<=m;i++)dist[i]=v[x][i];
11     visit[x]=1;
12     for(i=1;i<m;i++){
13         mi=INF;
14         for(j=1;j<=m;j++){
15             if(!visit[j]&&dist[j]<mi){
16                 mi=dist[j];
17                 minj=j;
18             }
19         }
20         if(mi==INF) return;
21         visit[minj]=1;
22         for(j=0;j<=m;j++){
23             if(!visit[j]&&dist[j]>dist[minj]+v[minj][j]){
24                 dist[j]=dist[minj]+v[minj][j];
25             }
26         }
27     }
28 }
29 
30 
31 int main(){
32     while(scanf("%d%d%d",&T,&S,&D)!=EOF){
33         int q,tm=0xFFFFFFF,i,j;
34         for(i=1;i<1050;i++){
35             for(j=1;j<1050;j++){
36                 v[i][j]=INF;
37             }
38         }
39         m=-1;
40         for(q=1;q<=T;q++){
41             int a,b,va;
42             scanf("%d%d%d",&a,&b,&va);
43             v[a][b]=v[b][a]=min(va,v[a][b]);
44             if(a>m)m=a;
45             if(b>m)m=b;
46         }
47         for(q=1;q<=S;q++)scanf("%d",&l[q]);
48         for(q=1;q<=D;q++)scanf("%d",&r[q]);
49         for(i=1;i<=S;i++){
50             DIJKSTRA(l[i]);
51             for(j=1;j<=D;j++){
52                 if(dist[r[j]]<tm)tm=dist[r[j]];
53             }
54         }
55         printf("%d\n",tm);
56     }
57     return 0;
58 }
View Code

 

hdu2066 一个人的旅行 最短路