题目链接:点击打开链接
题目分析:标准版的PRIM
题目总结:每次都是忘记写mid_dis=INF ,害得爆栈= =
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 600
#define INF 1000000000
using namespace std;
int grid[MAXN][MAXN];
int ans;
int closest[MAXN],lowcost[MAXN],min_dis;
void prim(int n)
{
int i,j,u,num=1,merge;
for(i=1;i<=n;i++)
{
closest[i] = 0;lowcost[i]= INF;
}
closest[1]=-1,u=1,ans=-1;
while(1)
{
if(num==n)
return;
min_dis=INF;
for(i=1;i<=n;i++)
{
if(closest[i]!=-1)
{
int tmp=grid[u][i];
if(tmp<lowcost[i])
lowcost[i]=tmp;
if(lowcost[i]<min_dis)
{
merge=i;
min_dis=lowcost[i];
}
}
}
if(min_dis>ans) ans=min_dis;
u=merge;
closest[u]=-1;
num++;
}
}
int main()
{
freopen("in.txt","r",stdin);
int n,t,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&grid[i][j]);
prim(n);
printf("%d\n",ans);
}
return 0;
}