poj1258 2010.2.21
prim
#include <stdio.h>
#include <string.h>
#define MAXN 100+10
#define INF 999999999
int map[MAXN][MAXN],num[MAXN],n,i,j,min1,min2,x1,x2,y1,y2,sum;
void main()
{
while (scanf("%d",&n)!=EOF)
{
min1=INF;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&map[i][j]);
if ((map[i][j]<min1)&&(map[i][j]!=0))
{
min1=map[i][j];
x1=i;
x2=j;
}
}
memset(num,0,sizeof(num));
num[x1]=1;
num[x2]=1;
sum=min1;
for(y1=1;y1<=n-2;y1++)
{
min2=INF;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(map[i][j]!=0&&num[i]==1&&num[j]==0&&map[i][j]<min2)
{
min2=map[i][j];
y2=j;
}
}
}
num[y2]=1;
sum+=min2;
}
printf("%d\n",sum);
}
}