数据结构和算法 - 图(上)C++中 class Graph 的创建及初始化

C++ 中的 class Graph 的构建及初始化


关于图的基本概念和图的存储结构可以参考 这篇帖子

1. 类构建
// 为方便起见不实行份文件编写
#include <map>
#include <set>
#include <utility>

class GraphNode;

class Edge {
   
public:
    Edge(int weight, GraphNode * from, GraphNode * to) {
   
        this->m_Weight = weight;
        this->m_From = from;
        this->m_To = to;
    }

public:
    int m_Weight;           // 权值
    GraphNode * m_From{
   };   // 该边的出发点
    GraphNode * m_To{
   };     // 该边指向的点
};


class GraphNode {
   
public:
    explicit GraphNode(int value, int in = 0, int out = 0) {
   
        this->m_Value = value;
        this->m_In = in;
        this->m_Out = out;
    }

public:
    int m_Value;                        // 节点的值
    int m_In;                           // 入度,指向该点的边的数量
    int m_Out;                          // 出度,该点指向的点的数量
    set<GraphNode *> m_NextNodesSet{
   };  // 该点指向的点的集合
    set<Edge *> m_EdgesSet{
   };           // 由该点出发的边的集合
};


class Graph {
   
public:
    ~Graph() {
   
        for (auto data : this->m_NodesMap) {
   
            delete data.second;
        }
        for (auto edge : this->m_EdgesSet) {
   
            delete edge;
        }
    }


public:
    map<int, GraphNode *> m_NodesMap{
   }; // (节点编号,节点)键值对,简单情况下可以用数组替代,加快寻址速度
    set<Edge *> m_EdgesSet{
   };      // 边的集合
};
2. 初始化方法举例
Graph * creatUndirectedGraph(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值