prim 算法
qwertyxk | 2485 | Accepted | 752K | 172MS | GCC | 743B | 2012-12-21 12:02:45 |
#include<stdio.h>
#define MAX 9999999
int villages[505][505],lowCost[505];
int prim(int N)
{
int result=0,i,j,k,minCost;
lowCost[1]=-1;
for(i=2;i<=N;i++)
lowCost[i]=villages[1][i];
for(i=2;i<=N;i++)
{
minCost=MAX;
for(j=2;j<=N;j++)
{
if(lowCost[j]>0&&lowCost[j]<minCost)
{
minCost=lowCost[j];
k=j;
}
}
lowCost[k]=-1;
if(minCost>result)
result=minCost;
for(j=2;j<=N;j++)
lowCost[j]=villages[k][j]<lowCost[j]?villages[k][j]:lowCost[j];
}
return result;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N,i,j;
scanf("%d",&N);
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
scanf("%d",&villages[i][j]);
printf("%d\n", prim(N));
}
return 0;
}