题目链接:点击打开链接
思路:
典型的最小生成树问题,直接上代码。
#include <iostream>
#include <string.h>
using namespace std;
const int inf = 70000;
int dis[501], edge[501][501], n;
bool vis[501];
int Prim()
{
memset(vis,false,sizeof(vis));
vis[0] = true;
memset(dis,inf,sizeof(dis));
int m = 1;
int s = 0, point, Max = 0;
while(1)
{
if(m == n)
break;
int Min = inf;
for(int i = 1;i < n;i++)
{
if(!vis[i] && dis[i] > edge[s][i])
dis[i] = edge[s][i];
if(!vis[i] && dis[i] < Min)
{
Min = dis[i];
point = i;
}
}
Max = max(Min,Max);
m++;
s = point;
vis[s] = true;
}
return Max;
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++)
cin>>edge[i][j];
cout<<Prim()<<endl;
}
return 0;
}