首页 > 代码库 > 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 }
hdu2066 一个人的旅行 最短路
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。