数据结构1 - 08-图7 公路村村通
Posted learn-excel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构1 - 08-图7 公路村村通相关的知识,希望对你有一定的参考价值。
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 ",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 }
以上是关于数据结构1 - 08-图7 公路村村通的主要内容,如果未能解决你的问题,请参考以下文章