九度 1341 艾薇儿的演唱会

http://ac.jobdu.com/problem.php?id=1341

类似当年浙大上机题目,不过这个明确指出可能有重边,剩下的事情就好做了

 1 #include <stdio.h>
2 #define INF 0xfffffff
3 int mat[102][102];
4 int N,M;
5 int dij(int a,int b)
6 {
7 bool visited[102];
8 int min_road[102];
9 int i,j;
10 for(i=0;i<N;i++){
11 visited[i]=false;
12 min_road[i]=mat[a][i];
13 }
14 int min=INF;
15 int node=a;
16 visited[a]=true;
17 min_road[a]=0;
18 for(i=1;i<=N;i++){
19 min=INF;
20 for(j=0;j<N;j++){
21 if(!visited[j]&&min_road[j]<min){
22 min=min_road[j];
23 node=j;
24 }
25 }
26 visited[node]=true;
27 for(j=0;j<N;j++){
28 if(!visited[j]&&min_road[j]>min_road[node]+mat[node][j])
29 min_road[j]=min_road[node]+mat[node][j];
30 }
31 }
32 return min_road[b];
33 }
34 int main()
35 {
36 while(scanf("%d%d",&N,&M)!=EOF){
37 int a,b;
38 scanf("%d%d",&a,&b);
39 int i,j;
40 for(i=0;i<N;i++)
41 for(j=0;j<N;j++)
42 mat[i][j]=INF;
43 for(i=0;i<M;i++){
44 int s,d,c;
45 scanf("%d%d%d",&s,&d,&c);
46 if(mat[s-1][d-1]>c)
47 mat[s-1][d-1]=mat[d-1][s-1]=c;
48 }
49 printf("%d\n",dij(a-1,b-1));
50
51 }
52 }



原文地址:https://www.cnblogs.com/yangce/p/2264463.html