Agri-Net

poj1258:http://poj.org/problem?id=1258

题意:生成树的模板题。简单题。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #define INF 100000000
 6 #define MAXN 103
 7 using namespace std;
 8 int n,m;
 9 int Edge[MAXN][MAXN];
10 int lowcost[MAXN];
11 int nearvex[MAXN];
12 void prim(int u0){
13     int i,j;
14     int sumweight=0;
15     for( i=1;i<=n;i++){
16         lowcost[i]=Edge[u0][i];
17         nearvex[i]=u0;
18     }
19     nearvex[u0]=-1;
20     for( i=1;i<n;i++){
21         int min=INF;
22         int v=-1;
23         for(j=1;j<=n;j++){
24             if(nearvex[j]!=-1&&lowcost[j]<min){
25                 v=j;min=lowcost[j];
26             }
27         }
28         if(v!=-1){
29             nearvex[v]=-1;
30             sumweight+=lowcost[v];
31             for(j=1;j<=n;j++){
32                 if(nearvex[j]!=-1&&Edge[v][j]<lowcost[j]){
33                     lowcost[j]=Edge[v][j];
34                     nearvex[j]=v;
35                     
36                 }
37             }
38         }
39     }
40     printf("%d\n",sumweight);
41 }
42 int main(){
43     int i,j;
44     int u,v,w;
45     while(~scanf("%d",&n)){
46     memset(Edge,0,sizeof(Edge));
47     for(i=1;i<=n;i++){
48         for(j=1;j<=n;j++){
49           scanf("%d",&w);    
50           Edge[i][j]=Edge[j][i]=w;
51         }
52     }
53     for( i=1;i<=n;i++)
54       for( j=1;j<=n;j++){
55           if(i==j)Edge[i][j]=0;
56           else if(Edge[i][j]==0)Edge[i][j]=INF;
57       }
58       prim(1);
59 }
60 }
View Code

 

posted on 2013-10-18 19:11  天依蓝  阅读(177)  评论(0编辑  收藏  举报

导航