还是畅通工程

http://acm.hdu.edu.cn/showproblem.php?pid=1233

Prim:

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAX 99999
 4 #define M 110
 5 int dis[M] ;
 6 int map[M][M] ;
 7 bool vis[M] ;
 8 void init()
 9 {
10     for(int i=0; i<M; i++)
11     for(int j=0; j<M; j++)
12     {
13         if(i==j) map[i][j] = 0 ;
14         map[i][j] = MAX ;
15     }
16 }
17 int prim(int n)
18 {
19     int i, j, min, pos ;
20     int sum = 0 ;
21     memset(vis, 0, sizeof(vis)) ;
22     for(i=1; i<=n; i++)
23     dis[i] = map[1][i] ;
24     vis[1] = true ;
25     dis[1] = MAX ;
26     for(i=2; i<=n; i++)
27     {
28         min = MAX ;
29         for(j=1; j<=n; j++)
30         {
31             if(!vis[j]&&dis[j]<min)
32             {
33                 min = dis[j] ;
34                 pos = j ;
35             }
36         }
37         sum += dis[pos] ;
38         vis[pos] = true ;
39         for(j=1; j<=n; j++)
40         {
41             if(!vis[j]&&dis[j]>map[pos][j])
42             {
43                 dis[j] = map[pos][j] ;
44             }
45         }
46      }
47     return sum ;
48 }
49 int main()
50 {
51     int a, b, c, n ;
52     while(scanf("%d", &n), n)
53     {
54         init() ;
55         for(int i=1; i<=n*(n-1)/2; i++)
56         {
57             scanf("%d%d%d", &a,&b, &c) ;
58             if(map[a][b]>c)
59             map[a][b] = map[b][a] = c ;
60         }
61         printf("%d\n", prim(n)) ;
62     }
63     return 0 ;
64 }
原文地址:https://www.cnblogs.com/yelan/p/2948597.html