最小生成树,PRIM算法
#include<iostream>
#include<cstring>
using namespace std;
int t,n;
int vi[510][510];
int prim(int n)
{
bool flag[510]={0};
int i,k,max=0,count=1,mark,min,j;
flag[1]=true;
while(count<n)
{
min=66000;
for(i=1;i<=n;i++)
{
if(!flag[i])
{
continue;
}
for(j=1;j<=n;j++)
{
if(i==j)
continue;
if(vi[i][j]<min&&(!flag[j]))
{
min=vi[i][j];mark=j;
}
}
}
flag[mark]=true;
if(min>max) max=min;
count++;
}
return max;
}
int main()
{
scanf("%d",&t);
while(t--)
{
memset(vi,0,sizeof(vi));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&vi[i][j]);
}
}
printf("%d\n",prim(n));
}
return 0;
}
本文介绍了一个使用PRIM算法求解最小生成树的C++实现。通过一个具体的程序示例展示了如何构造邻接矩阵并运用PRIM算法找到加权无向图中的最小生成树。该算法适用于计算机科学中的图论问题,特别是网络设计和优化问题。
2396

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



