MST算法

无向图的最小生成树是连接所有顶点的生成树中边权和最小的一棵。本文介绍了Prim算法和使用并查集实现的Kruscal算法求解最小生成树,并详细讨论了并查集的概念、操作及其在Kruscal算法中的应用,包括按高度合并和路径压缩的改进策略。
摘要由CSDN通过智能技术生成

无向图中,如果它的子图是连通图,并且是一颗树,则称其为生成树。

如果生成树的各边权值之和最小,则称其为最小生成树(MST)。

Prim算法求最小生成树:

int cost[MAX_V][MAX_V];    //边
int mincost[MAX_V];      //当前集合到该点的最短距离
bool used[MAX_V];       //标记该边是否纳入集合中
int V;       //节点数

int prim()
{
    for(int i=0;i<V;i++) //初始化
    {
        mincost[i]=INF;
        used[i]=flase;
    }
    mincost[0]=0;//一开始只有这一个是0,其余都是INF,所以这个是最小值
    
    int res=0;
    while(true)
    {
        int vx=-1; //每次找边开始时先对vx初始化,使得第一次时vx就等于数组中第一个未纳入集合中的节点
        for(int i=0;i<V;i++)
        {
            //在未纳入集合中的点中找最小边权的节点。分第一次赋值和之后赋值的情况
            if(!used[i]&&(vx==-1||mincost[i]<mincost[vx]))  vx=i;
        }
        if(vx==-1) break;  //所有节点全找完
        used[vx]=true;
        res+=mincost[vx];
        
   
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值