poj1258 Agri-Net(最小生成树)水题。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int inf=0x3f3f3f3f; 6 const int N=101; 7 int n,m; 8 int g[N][N],low[N]; 9 void prim(int u0){ 10 int i,j,mi,v,ans=0; 11 for(i=0;i<n;++i){ 12 low[i]=g[u0][i]; 13 } 14 low[u0]=-1; 15 for(i=1;i<n;++i){ 16 mi=inf; 17 v=-1; 18 for(j=0;j<n;++j) 19 if(low[j]!=-1&&low[j]<mi){ 20 v=j; mi=low[j]; 21 } 22 ans+=low[v]; 23 low[v]=-1; 24 for(j=0;j<n;++j){ 25 if(g[v][j]<low[j]){ 26 low[j]=g[v][j]; 27 } 28 } 29 } 30 printf("%d\n",ans); 31 } 32 int main(){ 33 int t,i,j; 34 while(scanf("%d",&n)==1){ 35 memset(g,inf,sizeof(inf)); 36 for(i=0;i<n;++i) 37 for(j=0;j<n;++j) 38 scanf("%d",&g[i][j]); 39 prim(0); 40 } 41 return 0; 42 }