据说水的可以……于是用上道题的模板改了一下输入输出……
代码跟上道题没有什么不同……
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define MAX 2000
using namespace std;
int map[510][510];
int prim(int n)
{
int lowstep[MAX];
int from[MAX];
int minn,minid,maxn=0;
for(int i=1;i<n;++i){
lowstep[i]=map[0][i];
from[i]=0;
}
from[0]=0;
for(int i=1;i<n;++i)
{
minn=1e8;
minid=0;
for(int j=1;j<n;++j)
{
if(lowstep[j]<minn&&lowstep[j]!=0)
{
minn=lowstep[j];
minid=j;
}
}
maxn=max(maxn,minn);
lowstep[minid]=0;
for(int j=1;j<n;++j)
{
if(map[minid][j]<lowstep[j])
{
lowstep[j]=map[minid][j];
from[j]=minid;
}
}
}
return maxn;
}
int main() {
int n,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
scanf("%d",&map[i][j]);
}
int ans;
ans=prim(n);
printf("%d\n",ans);
}
return 0;
}
本文介绍了一个基于Prim算法的实现,用于在一个给定的图中寻找最小生成树的最大边权值。通过调整输入输出方式,该算法适用于解决特定类型的问题。代码中详细展示了Prim算法的实现过程,包括初始化步骤、选择最小边权重节点、更新相邻节点的最短路径等关键步骤。
392

被折叠的 条评论
为什么被折叠?



