码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构1 - 07-图4 哈利·波特的考试

时间:2020-04-05 18:42:38      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:event   i++   click   lse   none   code   结构   std   can   

技术图片

 

 

技术图片
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAXN 101 
 4 #define INF 0x3fffffff 
 5 
 6 int g[MAXN][MAXN],n,m,dist[MAXN],result[MAXN],vis[MAXN];
 7 void read();
 8 void Dijkstra(int s);
 9 int main(){
10     read();
11     int i,j,maxlen=INF,index=-1;
12     memset(result,0,sizeof(result));
13     for(i=1;i<=n;i++){
14         Dijkstra(i);
15         maxlen=0;
16         for(j=1;j<=n;j++){
17             if(dist[j]==INF) {
18                 result[i] = INF;
19                 break;
20             }
21             if(dist[j]>maxlen && dist[j]!=INF) maxlen = dist[j];
22         }
23         if(result[i]!=INF){
24             result[i] = maxlen;
25         }
26     }
27     maxlen = INF;
28     for(i=1;i<=n;i++){
29         if(result[i]!=INF && result[i]<maxlen ){
30             maxlen = result[i];
31             index = i;
32         }
33     }
34     if(index==-1) printf("0\n");
35     else printf("%d %d\n",index,maxlen);
36     return 0;
37 }
38 void read(){
39     scanf("%d %d",&n,&m);
40     int u,v,w,i,j;
41     for(i=1;i<=n;i++)
42       for(j=1;j<=n;j++)
43          g[i][j] = INF;
44     
45     for(i=1;i<=m;i++){
46         scanf("%d %d %d",&u,&v,&w);
47         g[u][v] = w;
48         g[v][u] = w;
49         
50     }
51 }
52 void Dijkstra(int s){
53     //fill(dist,dist+MAXN,INF);
54     //fill(vis,vis+MAXN,0);
55     for(int i=1;i<=n;i++)
56        dist[i] = INF;
57     for(int i=1;i<=n;i++)
58        vis[i] = 0;
59     int mdata,mindex,i;
60     dist[s] =0;
61     while(1){
62         mdata = INF;
63         mindex = -1;
64         for(i=1;i<=n;i++){
65             if(dist[i]<mdata&&vis[i]==0){
66                 mdata = dist[i];
67                 mindex = i;
68             }
69         }
70         if(mindex==-1) break;
71         vis[mindex] = 1;
72         for(i=1;i<=n;i++){
73             if(vis[i]==0&&g[mindex][i]!=INF&&mindex!=i){
74                 if(dist[mindex]+g[mindex][i]<dist[i]){
75                     dist[i] = dist[mindex] + g[mindex][i];
76                 }
77             }
78         }
79         
80     }
81 }
View Code

 

数据结构1 - 07-图4 哈利·波特的考试

标签:event   i++   click   lse   none   code   结构   std   can   

原文地址:https://www.cnblogs.com/Learn-Excel/p/12638204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!