当前位置: 首页 > wzjs >正文

南通江苏网站建设付费内容网站

南通江苏网站建设,付费内容网站,同城购物网站建设,广东省三库一平台查询系统本节讲述如何在 C++ 中表示简单图, 本节将介绍邻接矩阵和邻接表的实现. 后续系列的博客中将会以邻接表为主, 偶尔会用到邻接矩阵. 环境要求 本文所用样例在Windows 11以及Ubuntu 24.04上面编译通过. Windows: 使用[Visual Studio],Ubuntu: 使用 Clang 18.1.3. (Ubuntu 24.04 …

本节讲述如何在 C++ 中表示简单图, 本节将介绍邻接矩阵和邻接表的实现. 后续系列的博客中将会以邻接表为主, 偶尔会用到邻接矩阵.

环境要求

本文所用样例在Windows 11以及Ubuntu 24.04上面编译通过.

  1. Windows: 使用[Visual Studio],
  2. Ubuntu: 使用 Clang 18.1.3. (Ubuntu 24.04 系统安装版本)
  3. GCC 无法编译直接本项目代码, 因为本文代码使用了 C++20 Module, 而 GCC 对此支持不完整.

概述

本节讨论的图为简单图, 即没有自环边(自己指向自己的边)和平行边(两个顶点之间存在多条边). 根据前一节提到的知识, 我们给出一个简单图的接口:


typedef unsigned Vertex;
typedef int Weight;
typedef std::pair<Vertex, Vertex> Edge;
typedef std::tuple<Vertex, Vertex, Weight> WeightedEdge;struct Graph {virtual ~Graph() = default;// 获取顶点数量[[nodiscard]] virtual size_t V() const = 0;// 获取边数量[[nodiscard]] virtual size_t E() const = 0;// 该图是有向图吗?[[nodiscard]] virtual bool Directed() const = 0;// 该图是带权图吗?[[nodiscard]] virtual bool Weighted() const = 0;// 获取顶点u的所有邻接顶点[[nodiscard]] virtual std::set<Vertex> Adj(Vertex u) const = 0;// 顶点u,v之间是否存在一条边[[nodiscard]] virtual bool HasEdge(Vertex u, Vertex v) const = 0;// 添加边u,vvirtual void AddEdge(Vertex u, Vertex v) = 0;// 添加带权边u,vvirtual void AddEdge(Vertex u, Vertex v, Weight w) = 0;// 将图以dot格式输出(Graphviz支持的格式), 可用于可视化[[nodiscard]] virtual std::string FormatAsDot() const = 0;
};

代码中为AddEdge增加了两个版本, 分别支持无权图和带权图.

有几点需要说明:

  1. 顶点和权重的类型均为无符号整型, 这是为了简化编程.
  2. 查询和操作接口均为纯虚函数, 即子类必须实现这些接口.
  3. C++虚基类需要将默认析构函数标记为virtual, 以保证派生类的析构函数被正确调用.

邻接矩阵

邻接矩阵是 n × n n \times n n×n 矩阵, 元素为两顶点间边数, 简单图邻接矩阵元素为 0 或 1, 主对角线为 0, 空间复杂度 O ( n 2 ) O(n^{2}) O(n2).
在无权图中, 邻接矩阵的元素为 0 或 1, 表示顶点之间是否存在边; 在带权图中, 邻接矩阵的元素为权重, 表示顶点之间边的权重.

在无向图中, 元素 [ m , n ] [m, n] [m,n] [ n , m ] [n, m] [n,m] 相等, 即 m m m n n n 之间存在边; 而在有向图中, [ m , n ] [m, n] [m,

http://www.dtcms.com/wzjs/324538.html

相关文章:

  • 网站开发是前端还是后台网站建设杭州
  • 免费建网站哪个平台好工具刷网站排刷排名软件
  • 微信微网站是什么案例成都网站优化公司
  • 武汉婚纱摄影网站设计360指数
  • 野外美食网站设计欣赏网络媒体广告代理
  • 深圳做网站有哪些最全的百度网盘搜索引擎
  • 河南专业做网站标题关键词优化技巧
  • 东营建站公司信息流广告优秀案例
  • 西宁网站建设开发公司拼多多关键词怎么优化
  • 顺义重庆网站建设建一个自己的网站
  • 武安信息港日照seo优化
  • dreamweaver如何下载郑州优化公司有哪些
  • wordpress 添加钩子seo学习
  • wpf做的网站武汉十大技能培训机构
  • 自己做网站怎么弄网站制作的步骤
  • 南京做网站的长沙seo优化推广公司
  • 厚街网站建设价格专业seo推广
  • 越秀网站建设推广互联网推广的好处
  • 这个网站做海外推广百度排名点击软件
  • 有和wind一样做用网站注册百度账号免费
  • 移动端响应式网站怎么做百度营销
  • 提升网站权重长春网站建设解决方案
  • 甘肃做网站价格宁波网站推广怎么做
  • 北京网站制作定制bt磁力
  • 怀化冰山涯IT网站建设公司百度推广开户流程
  • 如何在外管局网站做延期收汇免费合作推广
  • 安卓app下载平台电脑优化大师有用吗
  • 问卷星网站开发市场调查问卷我想在百度发布信息
  • 深圳网站营销推广公司电话微信推广软件有哪些
  • 江苏省建设工程网网站优化seo培