POJ_1258_Agri-Net(最小生成树 Prim)

还是注意初始化和数组的大小。跟前几题没什么区别。

 1 # include <stdio.h>
 2 # include <string.h>
 3 # define inf 100010
 4 int map[120][120];
 5 int m;
 6 int Prim()
 7 {
 8     int low[120];
 9     int visit[120]={0};
10     int i,j,k=1;
11     int s=1;
12     int point;
13     int min;
14     int sum=0;
15     for(i=1;i<=m;i++)
16         low[i]=inf;
17     visit[s]=1;
18     while(1)
19     {
20         if(k == m)
21             break;
22         min=inf;
23         for(j=2;j<=m;j++)
24         {
25             if(!visit[j] && low[j] > map[s][j])
26                 low[j]=map[s][j];
27             if(!visit[j] && min>low[j])
28             {
29                 min=low[j];
30                 point=j;
31             }
32         }
33         sum+=min;
34         s=point;
35         visit[s]=1;
36         k++;
37     }
38     return sum;
39 }
40 int main()
41 {
42     int i,j,k;
43     while(scanf("%d",&m) != EOF)
44     {
45     
46         for(i=1;i<=m;i++)
47         {
48             for(j=1;j<=m;j++)
49             {
50                 scanf("%d",&map[i][j]);
51             }
52         }
53         printf("%d\n",Prim());
54     }
55     return 0;
56 }

 

posted on 2013-08-16 15:46  随风浪子的博客  阅读(96)  评论(0编辑  收藏  举报

导航