最小生成树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()算法;的主要内容,如果未能解决你的问题,请参考以下文章

prim和kruscal算法得到的最小生成树是不是一样

图的最小生成树算法(Prim和Kruskal)

最小生成树prim()算法;

最小生成树-prim算法

图的最小生成树算法?

急!数据结构最小生成树prim算法C语言实现