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 }