数据结构与算法(C++)– 图(Graph)


1、图的基础概念

定义:一个图G=(V, E)由顶点(vertex)的集V和边(edge)的集E组成。

  • 边(edge):一对点即为一条边(v, w),其中v, w ∈ V
  • 有向图(directed):点对是有序的
  • 无向图(undirected):点对是无序的
  • 邻接(adjacent):w 邻接到 v,当且仅当(v, w )∈ E
  • 权(weight)/值(cost):边上的值
  • 路径(path):连通两点间的边
  • 长(lengh):路径上的边数
  • 简单路径(simple path):路径上的顶点都是互异的
  • 环(cycle):有向图中,首尾相连长度至少为1的简单路径。
  • 无环(acyclic):有向图中中没有环
  • 连通的(connected):无向图中每一个顶点到其它顶点都存在一条路径
  • 强连通的(strongly connected):有向图具有连通的性质
  • 基础图(underlying graph):无向图去掉边的方向
  • 弱连通的(connected):有向图的基础图是连通的
  • 完全图(complete graph):每一对顶点都存在一条边

几个关系:

  • n 个顶点的无向连通图,至少有 n-1 条边
  • n 个顶点的有向强连通图,至少有 n 条边
  • n 个顶点的无向完全图,有 n(n-1)/2 条边
  • n 个顶点的有向完全图,有 n(n-1) 条边

2、图的表示

图有两种表示方法:邻接矩阵,邻接表

邻接矩阵: 稠密(dense),复杂度为O(|V|^2)

邻接表: 稀疏(sparse),复杂度为O(|E| + |V|)


3、广度优先搜索(Breadth-first search,BFS)

定义: 按照由近到远的层进行搜索

实现: 使用队列(queue)结构实现。首先起点入队,队列出队一个元素,把邻接于该元素的所有顶点入队,循环直到队列为空即所有顶点都被访问过。


4、深度优先搜索(Depth-first search,DFS)

定义: 按照由深到浅的递归进行搜索

实现: 使用栈(stack)结构实现。首先起点入栈,出栈一个元素,把邻接于该元素的所有顶点入栈,循环直到栈为空即所有顶点都被访问过。

5、有向无权图的最短路径

实现: 使用广度优先搜索,复杂度为O(|E| + |V|)。

  1. 首先把起点的长(dv)设为0其它点的长设为∞
  2. 使用广度优先搜索算法更新点的dv值(邻接点+1),并记录更新点的父点(pv)
  3. 直到所有的点都被更新过,停止搜索

数据结构与算法(C++)– 图(Graph)相关推荐

  1. python函数结构图_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  2. python define graph_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  3. 特征图注意力_从数据结构到算法:图网络方法初探

    作者 | 朱梓豪 来源 | 机器之心 原文 | 从数据结构到算法:图网络方法初探 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入. ...

  4. 数据结构与算法之图的应用

    数据结构与算法之图的应用 图的定义和基本概念 图的实现 数组〈邻接矩阵〉 邻接表 图的应用 最小生成树 Prim(普里姆)算法 Kruskal(克鲁斯卡尔)算法 最短路径 迪克斯特拉算法 拓扑排序 执 ...

  5. 数据结构与算法--符号图

    数据结构与算法--符号图 为了计算简单,传统的图中,都是使用整数来表示顶点,这样难免会有点抽象,不能直接反映各个顶点代表的信息.在实际生活中,使用图时一般会建立一个一一对应的关系表,如下 顶点 0 1 ...

  6. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  7. 数据结构与算法之-----图(拓扑排序)

    [​​​​​​​ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据 ...

  8. 数据结构与算法之-----图(搜索算法)

    [ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...

  9. 数据结构与算法——29. 图(Graph)的概念及应用

    文章目录 一.图(Graph)的概念 1. 图的相关术语 2. 图的定义 二.图抽象数据类型(ADT Graph) 1. 邻接矩阵实现图 2. 邻接列表实现图 3. python代码实现 三.图的应用 ...

  10. js数据结构和算法(8)-图

    8-图(第11章) 8.1 图的定义 图是一种非线性结构,由一系列顶点及其连接顶点的边组成.比如A和B.A和D是相邻的,而A和E不是相邻的.一个顶点相邻顶点的数量叫作度,比如A的度为3.D的度为4.路 ...

最新文章

  1. 使用Docker的macvlan为容器提供桥接网络及跨主机通讯
  2. 第八天学习Java的笔记(方法有参无参,有返回值和无返回值)
  3. linux中怎样建立批量用户,Linux 大批量建立用户
  4. java非公平锁_Java多线程 -- 公平锁和非公平锁的一些思考
  5. lua loadstring传递参数_lua学习之函数篇
  6. MongoDB经典故障系列一:数据库频繁启动失败怎么办?
  7. 【设计模式】解释器模式
  8. 一个存储过程实现(问题答案)
  9. c语言中两整数相除保留小数的方法
  10. 维也纳新生生活指南(2018春季版)
  11. 上海大学计算机学院领军人物,上海大学计算机工程与科学学院研究生导师简介-谢 江高级工程师...
  12. 刷榜中ASO优化中下载量与评论之间的对应比
  13. 狂神ajax,Ajax 学习笔记 by狂神说
  14. 华为鸿蒙wifi认证,鸿蒙 WiFi操作,热点连接
  15. vmd python 命令_VMD常用命令
  16. [DirectShow] 033 - Using Windowed Mode
  17. springboot 解决 NoClassDefFoundError: redis/clients/jedis/util/SafeEncoder
  18. 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链...
  19. C++剖析 cout<<“hello world“<<endl;
  20. 杭电18年计算机考研人数,2018杭州电子科技大学考研报考统计

热门文章

  1. 中间件及tomcat的内存溢出调优
  2. Mybatis通过colliection属性递归获取菜单树
  3. 错误日志类-也可以用于查看输出结构
  4. Oracle命令--数据文件被误删后的处理
  5. ABP 拦截器不工作
  6. Android 高效的`InjectView – ButterKnife`
  7. 数据库限制内存使用方法
  8. [原创]位运算符实现两个整数加法运算
  9. Hibernate之N+1问题
  10. 使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结