首页 > 代码库 > POJ 2485
POJ 2485
第一题最小生成树
#include <iostream>
#include <cstdio>
using namespace std;
#define max 501
const int maxd =(1<<30);
int a[max][max],way[max];
bool visited[max];
void build(int n){
int low[max],min,k=0,way1;
visited[0]=true;
for(int i=1;i<n;i++){
low[i]=a[0][i];
visited[i]=false;
}
for(int i=1;i<n;i++){
min=maxd;
way1=0;
for(int j=1;j<n;j++){
if(low[j]<min && !visited[j])
{
min=low[j];
way1=j;
}
}
way[k++]=min;
visited[way1]=true;
for(int j=1;j<n;j++){
if(a[way1][j]<low[j] && !visited[j])//进行一次更新
low[j]=a[way1][j];
}
}
}
int main(){
int t,n;
//freopen("test.txt","r",stdin);
cin>>t;
while(t--){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cin>>a[i][j];
a[i][i]=maxd;
}
build(n);
int max1=0;
for(int i=0;i<n;i++)if(max1<way[i])max1=way[i];
cout<<max1<<endl;
}
return 0;
}