图

  一个,由顶点(vertex)集和边(edge)集E组成。每一条边,连接了两个顶点,也就是一个点对

  有向图 无向图

  如果点对之后是分次序的(比如仅限于从A点到B点),那么这这个图就是有向图(digraph)。此时我们可以把边叫做弧(arc)。

  如果没有次序的差别,那么就是无向图

图-无向图和有向图

  连通 强连通 弱连通

  在上图的无向图中,由B到A,可以走B→A,也可以走B→C→A,还可以走B→C→D→A。

  在上图的有向图中,由B到A,因为受到次序的限制,只能走B→A,B→C→A。

  对于这样的线路,除了出发的顶点和结束的顶点之外,要求经过的顶点都不相同。这样这样的一组顶点序列就叫做一条路径。

  对于无向图,如果任意两个顶点都能找到一条路径,这个无向图就是连通的

  对于有向图,在弧方向的限制下,如果任意两个顶点都能找到一条路径,这个有向图就是强连通的。如果去掉弧的指向才能满足条件,那么就是弱连通的。

  完全图

  当一个图中,每一个点和任意另一个点之间都是点对(都由边连接),这个图就是完全图

图-完全图

  图的现实应用举例

  图的现实应用还是非常好理解的。

  在城市里坐地铁,地铁线路图就是一个 。从 下沙江滨站 ,要前往 龙翔桥站 ,就是在找这两个顶点间的路径。

  图的实现方法

  仍然使用C语言举例。

  邻接矩阵法

  邻接矩阵法:用一个一维数组来保存顶点的信息,用一个二维数组来保存与 边 相关的信息。

  比如下面这个无向图的例子,我们用0表示两个顶点间没有边,1表示这两个顶点间的边存在:

图-邻接矩阵法的简单示例(无向图)

  其实二维数组中还可以存储更多的内容,比如在上面地铁的例子中,可以在二维数组中存储两个顶点的距离,然后用-1表示这两个顶点间无可通地铁路径。具体的使用方式,存储的内容都可以参照实际的需求进行变更。

  我们再看一下有向图的例子。这一次,我们为每一条边都加入一个,这个权的实际意义,比如两个顶点间的地铁的距离。用无穷远表示两个顶点之间没有有效的边。

 

图-邻接矩阵法的例子(带 权 的有向图)

  需要注意的是:邻接矩阵对于边数相对顶点较少的图,就是对存储空间极大的浪费。

  邻接表

  对于边的数目相对于顶点较少的图,使用邻接表。

  

图-无向图的邻接表法

  以C语言为例,构造一个无向图的邻接表。我们需要两种结构体。构造 结构体A 来表示一个顶点。data部分存放该顶点的数据,firstedge是指针。

  再构造一个结构体B,adjvex来表示顶点的下标或地址,next表示下一个顶点的地址。

  现在我们用一个结构体A的数组,来装下所有顶点的数据。再以V0这个顶点为例。V0与V1,V2,V3邻接。我们将V0所在的结构体A的firstedge指向一个结构体B1,这个结构体B1的adjvex存放的是V1的地址下标“1”,让它的next再指向下一个结构体B2,这个结构体B2中的adjvex存放的是V2的地址下标2,它的next再指向第三个结构体B3,这个结构体中存放V3的地址下标“3”。此时,V0所邻接的所有顶点都已经被连接在一起了。所以第三个结构体B的next为空。比较容易觉得奇怪的地方是,V0和这三个顶点的连接其实是没有顺序之分的,但在这个表达方式中,似乎给了人一种他们有次序的错觉。实际上他也只是把与V0邻接的所有顶点串在一起而已,连接的次序没有实际意义。

  有向图也可以用邻接表法,但是由于有向图的弧的方向性,我们需要用两个邻接表来表示一个有向图。一个邻接表,存放从这个顶点指向外部的弧形成的图,另外一个存放指向这个顶点的弧形成的图。比如下面这个例子:

  

图-有向图的邻接表

  记录顶点指向外部的图时,叫做邻接表。记录指向该顶点的弧时,叫做逆邻接表。

  

未完。

转载于:https://www.cnblogs.com/OranBlog/p/8423119.html

[数据结构] 图 ,邻接矩阵法,邻接表法相关推荐

  1. 数据结构之图的存储结构:邻接矩阵法

    图的存储结构:邻接矩阵法 邻接矩阵法: 邻接矩阵的定义: 邻接矩阵存储无向图: 邻接矩阵存储有向图: 邻接矩阵存储网: 邻接矩阵法的性质: 邻接矩阵法的代码实现: 矩阵运算A的n次幂的含义: 性能分析 ...

  2. c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作

    #include #include #include #define MAX 100 typedef char DataType; typedef int VectorRelationType; ty ...

  3. 【图论】图的建立——邻接矩阵法

    G[i][j]:表示顶点i->j的边权 若边权为0.-1.或一个很大的数,表示边不存在 适用于顶点数较小的题(一般不超过100) 1.图的定义 顶点数.边数.权 2.初始化一个有顶点但没有边的图 ...

  4. 王道——数据结构——图(1)

    系列文章目录 其他章节相关文章 王道--数据结构--栈和队列(1) 王道--数据结构--树与二叉树(1) 本章节其他相关文章 文章目录 系列文章目录 其他章节相关文章 本章节其他相关文章 前言 一.邻 ...

  5. 数据结构之图的存储结构:邻接表法

    图的存储结构:邻接表法 产生条件: 邻接表法的定义: 邻接表法的特点: 邻接表法的代码定义: 邻接表法与邻接矩阵法的对比: 产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大 邻接表法 ...

  6. 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历

    邻接表法存储 邻接表发存储需要时无权无向图.用数组+链表的方式完成 数组用来记录地点,链表来记录每一个地点对应的相邻地点 1.构造一个数据结构来存放数组的序号以及指针用来指向链表 2.创造结点,构建链 ...

  7. 数据结构之图的创建(邻接表)

    数据结构之图的基本概念中了解了图的基本概念,接下来对图的代码实现进行详解. 邻接无向图 1. 邻接表无向图介绍 邻接表无向图是指通过邻接表表示的无向图. 上面的图G1包含了"A,B,C,D, ...

  8. 图的存储结构——邻接表法

    图的存储结构--邻接表法 一.邻接表 ​ 由顶点表和边表构成,顶点表由顶点域(data)和指向第一条邻接边的指针(firstarc)构成,边表(邻接表)结点由邻接点域(adjvex)和指向下一条邻接边 ...

  9. 数据结构——图的邻接表存储

    数据结构--图的邻接表存储 功能实现: (1)图的邻接矩阵的储存 (2)深度优先遍历 (3).广度优先遍历 (4)求结点的度 (5)判断图是否连通 (6)求最小生成树 参考代码 #include &l ...

  10. 图的存储__十字链表法和邻接多重表法

    文章目录 一.十字链表法 概念 性能分析: 二.邻接多重表法 概念 复杂度分析 总结 一.十字链表法 概念 1.十字链表法只能存储有向图. 2.每个表中有一个顶点数组,每个顶点用两个指针,其中橙色指针 ...

最新文章

  1. Android 第三方图表类 MPChart 的使用
  2. 陈慧琳的10招不节食瘦身法 - 健康程序员,至尚生活!
  3. 又拍网架构-又一个用到python的网站
  4. java在控制台打印余弦曲线,java打印正弦曲线示例
  5. 诗与远方:无题(六十二)
  6. 14寸笔记本电脑推荐_2020笔记本电脑推荐(小米篇)
  7. 计算机设备财产登记册,幼儿园财产登记制度
  8. 详解华夏银行iDo平台一体化运维的落地过程
  9. 微信小助手简版 WeChatSeptet for Mac安装教程!
  10. 【翻译】介绍一下Opta。Rails上的Terraform
  11. JavaFx界面功能隐藏和禁用
  12. 微信缓存dat怎么转图片_PC微信dat如何转图片?方式方法
  13. word的小方框如何在里面打上对勾
  14. tiptop自定义发送邮件
  15. ​为什么冠状病毒的死亡率具有误导性?
  16. 洗车店的预约系统小程序开发步骤_分享预约系统小程序有什么作用
  17. 2019最新《JavaEE系统架构师学习路线之基础篇》
  18. 如何端正的去学好编程
  19. DWG文件有什么方法可以转换为JPG文件
  20. 如何恢复iPhone/iPad里丢失数据?

热门文章

  1. XII jenkins
  2. DockOne微信分享(一一零):Docker在沪江落地的实践
  3. 为/tmp添加nodev/nosuid/noexec挂载选项
  4. WebGL难以置信的神奇效果
  5. 【面向对象设计基础】UML统一建模语言初学
  6. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用6
  7. .Net 中的序列化与反序列化[概述]
  8. Eset易视Smart灵巧护卫Security
  9. mysql 小数转换成百分数查出(保留两位小数百分数)
  10. 使用ImageIO.write上传二维码文件时候,提示系统找不到指定路径