数据结构与算法C++之最小生成树问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最小生成树算法 Lazy Prim,对下面的有权图使用Lazy Prim算法求最小生成树
在这里插入图片描述
(1)首先将起始节点0作为切分的一部分,将其他的节点作为切分的另外一部分,这样就得到4个横切边,横切边中最小的那个为0-7,所以0-7这条横切边一定属于最小生成树,这里使用最小堆来找到最小边
在这里插入图片描述
(2)接下来可以将节点7也表示为红色,这样与7连接的又多了4个横切边,那么所有的7条横切边中最小的那个是1-7,该条边也属于最小生成树,
在这里插入图片描述
(3)接下来将1表示为红色,又可增加与节点1相连接的3条横切边,这样在所有的横切边中,最小的那条边是0-2,将2表为红色,又可增加4条横切边
在这里插入图片描述
(4)横切边中最小的那个是2-3,将3表为红色,又可增加2条横切边,接下来最小的横切边是5-7,将5标为红色,增加相应的横切边,接下来横切边中最小的是0.29的1-3这条边,但是1和3都已经是红色的节点,表示1-3已经不是横切边了,
在这里插入图片描述
(5)舍弃1-3这条边,同理舍弃2-7和1-5,接下来最小的横切边为4-5,4-5属于最小生成树,标红,
在这里插入图片描述
(6)以此类推,可将所有的节点都遍历完
在这里插入图片描述
程序实现如下

#include <iostream>
#include <iomanip>
#include "DenseGraph.h"
#include "SparseGraph.h"
#include "ReadGraph.h"
#include "LazyPrimMST.h"

using namespace std;

int main() {
   

    string filename = "testG1.txt";
    int V = 8;

    SparseGraph<double> g = SparseGraph<double>(V, false);
    ReadGraph<SparseGraph<double>, double> ReadGraph(g, filename);

    //Test Lazy Prim MST
    cout<<"Test Lazy Prim MST:"<<endl;
    LazyPrimMST<SparseGraph<double>, double> lazyPrimMST(g);
    vector< Edge<double> > mst = lazyPrimMST.mstEdges();
    for (int i = 0; i < mst.size(); i ++)
        cout<<mst[i]<<endl;
    cout<<"The MST weight is: "
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值