最小生成树prim()算法;
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小生成树prim()算法;相关的知识,希望对你有一定的参考价值。
1.最小生成树是指连通所有点的路径之和最小;
2.prim算法是由一个点扩展到所有点,开始生成树中只有一个节点v,第一次扩展,将距离最小生成树最近的节点加入最小生成树,同时更新最小生成树到其他节点的最短路,以此类推,直到所有节点都加入最小生成树。
3.以poj2485为例,
题意:求最小生成树中的最大边长;
源码:
#include<iostream>
#include<stdio.h>
#define MAX 999999
using namespace std;
int mapp[510][510];
int check()
{
int i,j,n;
int maxx=0;
bool v[600];
int dist[600];
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
scanf("%d",&mapp[i][j]);
if(mapp[i][j]==0) mapp[i][j]=MAX;
}
for(i=1;i<=600;i++) v[i]=false;
//从第一个节点开始扩展
v[1]=true;
for (i=1;i<=n;i++){
dist[i]=mapp[1][i];
}
//需要加入n-1个点
for(i=1;i<=n-1;i++)
{
int mini=0,minn=MAX;
for(j=1;j<=n;j++)
if(!v[j]&&minn>dist[j])
{
minn=dist[j];
mini=j;
}
if(maxx<minn) maxx=minn;
v[mini]=true;
for(j=1;j<=n;j++)
if(!v[j]&&dist[j]>mapp[mini][j]){
dist[j]=mapp[mini][j];
}
}
return maxx;
}
int main()
{
int t,i;
cin>>t;
for (i=1;i<=t;i++)
{
cout<<check()<<endl;
}
return 0;
}
以上是关于最小生成树prim()算法;的主要内容,如果未能解决你的问题,请参考以下文章