最小生成树,PRIM算法
#include<iostream>
#include<cstring>
using namespace std;
int t,n;
int vi[510][510];
int prim(int n)
{
bool flag[510]={0};
int i,k,max=0,count=1,mark,min,j;
flag[1]=true;
while(count<n)
{
min=66000;
for(i=1;i<=n;i++)
{
if(!flag[i])
{
continue;
}
for(j=1;j<=n;j++)
{
if(i==j)
continue;
if(vi[i][j]<min&&(!flag[j]))
{
min=vi[i][j];mark=j;
}
}
}
flag[mark]=true;
if(min>max) max=min;
count++;
}
return max;
}
int main()
{
scanf("%d",&t);
while(t--)
{
memset(vi,0,sizeof(vi));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&vi[i][j]);
}
}
printf("%d\n",prim(n));
}
return 0;
}