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

数据结构1 - 08-图7 公路村村通

时间:2020-04-05 20:51:13      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:hide   ffffff   gif   min   sed   code   cdc   div   splay   

技术图片

 

 

技术图片
 1  #include<stdio.h>
 2 #include<string.h>
 3 #define MAXN 1001
 4 #define INF 0x3fffffff
 5 int n,m,g[MAXN][MAXN],vis[MAXN],dist[MAXN];
 6 void read();
 7 int  prim();
 8 int main(){
 9     read();
10     int cost = prim();
11     printf("%d\n",cost);
12     return 0;
13 }
14 void read(){
15     scanf("%d %d",&n,&m);
16     int i,j,v1,v2,cost1;
17     for(i=1;i<=n;i++)
18         for(j=1;j<=n;j++)
19             g[i][j] = INF;
20     for(i=1;i<=m;i++){
21         scanf("%d %d %d",&v1,&v2,&cost1);
22         g[v1][v2] = cost1;
23         g[v2][v1] = cost1;
24     }
25 }
26 int prim(){
27     int cost,i,j;
28     for(i=1;i<=n;i++){
29         dist[i] = INF;
30         vis[i] = 0;
31     }
32     dist[1] = 0;
33     vis[1] = 1;
34     for(i=1;i<=n;i++)
35         if(g[1][i]!=INF&&i!=1)
36             dist[i] = g[1][i];
37     cost = 0;
38     while(1){
39         int mdist=INF,mindex=-1;
40         for(i=1;i<=n;i++){
41             if(mdist>dist[i] && vis[i]==0){
42                 mdist = dist[i];
43                 mindex = i;
44             }
45         }
46         if(mindex==-1) break;
47         cost += mdist;
48         vis[mindex] = 1;
49         for(i=1;i<=n;i++){
50             if(g[mindex][i]!=INF && i!=mindex && vis[i]==0){
51                 if(dist[i]>g[mindex][i]) dist[i] = g[mindex][i];
52             }
53         }
54     }
55     int vsum=0;
56     for(i=1;i<=n;i++) vsum += vis[i];
57     if (vsum==n) return cost;
58     else return -1;
59         
60     
61 }
View Code

 

数据结构1 - 08-图7 公路村村通

标签:hide   ffffff   gif   min   sed   code   cdc   div   splay   

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

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