最小生成树 10.1.5.253 1505 poj 1258 http://poj.org/problem?id=1258
#include <iostream>// poj 1258 10.1.5.253 1505 using namespace std; #define N 105 // 顶点的最大个数 (多写 int a[N][N],low[N],n,ans; int min(int x,int y) { return x<y?x:y; } void prim(int u0) { int i,j,m,k; ans=0; // for (i=1;i<n;i++) low[i]=a[u0][i]; // low[u0]=-1; for (i=1;i<n;i++) //循环n-1次 依次加入n-1个顶点 { m=1<<20; for (j=0;j<n;j++) //找一个最小的的边 if (low[j]!=-1&&low[j]<m) { m=low[j]; k=j; } ans+=m; // low[k]=-1; for (j=0;j<n;j++) // if (low[j]!=-1) low[j]=min(low[j],a[k][j]); } } int main() { int i,j; while(cin>>n&&n>=3) { for (i=0;i<n;i++) //邻接矩阵 for (j=0;j<n;j++) cin>>a[i][j]; prim(0); // 从0开始 cout<<ans<<endl; } return 0; }