PKU 1251 Jungle Roads/PKU 1258 Agri-Net

PKU 1251 Jungle Roads/PKU 1258 Agri-Net

问题:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1251
http://acm.pku.edu.cn/JudgeOnline/problem?id=1258

思路:
最简单典型的最小生成树,PRIM算法
参考算法导论

代码(pku 1251):
 1  /*  MST problem  */
 2  #include < stdio.h >
 3  #include < stdlib.h >
 4  #include < string .h >
 5  #define  MAX_LEN 27
 6  #define  INF 0x7FFFFFFF
 7  int  num, min;
 8  int  adj[MAX_LEN][MAX_LEN];
 9  int  key[MAX_LEN],  in [MAX_LEN];
10 
11  void
12  init()
13  {
14       int  i, j, k, dis;
15       char  tmp[ 2 ], tmp1[ 2 ];
16      memset(adj,  0 sizeof (adj));
17      memset( in 0 sizeof ( in ));
18      min  =   0 ;
19       for (i = 0 ; i < num; i ++ )
20          key[i]  =  INF;
21       for (i = 0 ; i < num - 1 ; i ++ ) {
22          scanf( " %s %d " , tmp,  & k);
23           for (j = 0 ; j < k; j ++ ) {
24              scanf( " %s %d " , tmp1,  & dis);
25              adj[tmp[ 0 ] - ' A ' ][tmp1[ 0 ] - ' A ' =  dis;
26              adj[tmp1[ 0 ] - ' A ' ][tmp[ 0 ] - ' A ' =  dis;
27          }
28      }
29  }
30 
31  void
32  prim()
33  {
34       int  i, j, k, cur;
35       /*  start from vertex 'A'  */
36       in [ 0 =   1 ;
37       for (i = 1 ; i < num; i ++ )
38           if (adj[ 0 ][i])
39              key[i]  =  adj[ 0 ][i];
40       for (i = 1 ; i < num; i ++ ) {  /*  num-1 vertex left  */
41          cur  =  INF;
42           for (j = 0 ; j < num; j ++ ) {
43               if ( ! in [j]  &&  key[j] < cur) {
44                  cur  =  key[j];
45                  k  =  j;
46              }
47          }
48          min  +=  cur;
49           in [k]  =   1 ;
50           for (j = 0 ; j < num; j ++ ) {
51               if (adj[k][j]) {
52                   if ( ! in [j]  &&  adj[k][j] < key[j])
53                      key[j]  =  adj[k][j];
54              }
55          }
56      }
57  }
58 
59  int
60  main( int  argc,  char   ** argv)
61  {
62       while (scanf( " %d " & num) != EOF  &&  num) {
63          init();
64          prim();
65          printf( " %d\n " , min);
66      }
67  }

你可能感兴趣的:(PKU 1251 Jungle Roads/PKU 1258 Agri-Net)