最小生成树——Prim/Kruskal

本文介绍了最小生成树的概念,并通过邻接矩阵详细解释了Prim和Kruskal算法的工作原理。Prim算法从一个顶点出发,逐步构建最小生成树,适合稠密图;而Kruskal算法则从边开始,避免环路,适用于稀疏图。两种算法的核心都是寻找权值最小的边并确保不形成环路。
摘要由CSDN通过智能技术生成

本篇先用邻接矩阵示例。

假定图中有如下数据成员以及成员函数:

//邻接矩阵表示法
#ifndef GRAPH_H
#define GRAPH_H

#include "edge.h"

//template <typename T>
class Graph {
public:
    using T = char;
    ...
    void PrimMST(const int &index);     //从点开始。
    void KruskalMST();                  //从边开始。

private:
    const int& getWeight(const int &indexA, const int &indexB);

    struct Vertex {
        T data;
        bool isVisited;
    };
    int capacity;       //图中的顶点数
    Vertex *pVertex;    //顶点数组
    int *pMatrix;       //邻接矩阵

    //边类,及边数组,为MST服务。将取出的边依次保存在pEdge中。
    Edge *pEdge;
};

#endif

基本的建图、加点、加边、遍历,仅补充构造函数的实现,其余略过。

<span style="color:#800080;">
Graph</span><span style="color:#000000;">::</span><span style="color:#000000;">Graph</span><span style="color:#000000;">(</span><span style="color:#808000;">const</span><span style="color:#c0c0c0;"> </span><span style="color:#808000;">int</span><span style="color:#c0c0c0;"> </span><span style="color:#000000;">&</span><span style="color:#000000;">capacity</span><span style="color:#000000;">):</span><pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style="color:#c0c0c0;">    </span><span style="color:#800000;">capacity</span><span style
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值