#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
int t,n,Max,path[501][501],num;
bool visited[501];
scanf("%d",&t);
for(int i=0;i<t;i++){//Input data
scanf("%d",&n);
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
scanf("%d",&path[j][k]);
memset(visited,false,n+1);
visited[0]=true; Max=-1;
for(int j=0;j<n-1;j++){
int Min=99999999;
for(int p=0;p<n;p++){
if(visited[p]==false)
continue;
for(int q=0;q<n;q++){
if(visited[q]==false&&path[p][q]<Min){
Min= path[p][q]; num=q;}
}
}
//cout<<"test: "<<Min<<endl;
visited[num]=true;
if(Min>Max)
Max=Min;
}
printf("%d\n",Max);
}
system("pause");
return 0;
}
又是一道水题,就不多说了,总之就是利用Prim算法,权当是练基础吧~~