047.图的概念和实现


博主的 Github 地址


1. 图的概念

1.1. 图的必要性

  • 线性表局限于一个直接前驱和一个直接后继的关系
  • 树结构也只能有一个直接前驱即父结点
  • 当需要表示多对多的关系时, 需要用到图结构

1.2. 图的示例

  • 图是一种数据结构, 其结点可以具有零个或多个相邻元素.
  • 两个结点之间的连接称为边, 结点也可以称为顶点.

sample


1.3. 图的常用概念

  • 顶点(vertex):

    • 即结点, 如 A,B,C 顶点
  • 边(edge):

    • 两个结点之间的连接即为边
  • 路径:

    • 比如从 D 到 C 的路径, 有如下两种:
      • D->B->C
      • D->A->B->C
  • 无向图(如下图):

    • 无向图的顶点之间的连接没有方向, 如 A 到 B 的路径,
      即可以是 A->B, 也可以是 B->A

pic1

  • 有向图(如下图):
    • 有向图的顶点之间的连接有方向, 比如 A 到 B 的路径,
      只能是 A->B, 不能 B->A.

pic2

  • 带权图(如下图):
    • 带权图的每条边都带有权值, 带权图也叫做网.

pic3


1.4. 图的表示方式

  • 图的表示方式有两种:
    • 二维数组表示, 也叫做邻接矩阵
    • 链表表示, 也叫做邻接表
1.4.1. 邻接矩阵
  • 邻接矩阵是表示图形中顶点之间相邻关系的矩阵.
  • 对于 n 个顶点的图而言, 矩阵是 n 行 n 列的二维数组.
  • 它的 row 和 col 表示的是 1…n 个点.

pic4

1.4.2. 邻接表
  • 邻接矩阵需要为每个顶点都分配 n 条边的空间,
    实际上有很多边可能是不存在的, 会造成空间浪费.

  • 邻接表的实现只关心存在的边, 不关心不存在的边.
    因此不会造成空间的浪费.

  • 邻接表由数组 + 链表的形式构成.

pic5

关于上述示例的说明:

  • 标号为 0 的结点的相关联结点为 1, 2, 3, 4
  • 标号为 1 的结点的相关联结点为 0, 4
  • 标号为 2 的结点的相关联结点为 0, 4, 5
  • 标号为 3 的结点的相关联结点为 0, 5
  • 标号为 4 的结点的相关联结点为 0, 1, 2, 5
  • 标号为 5 的结点的相关联结点为 2, 3, 4

2. 图的实现(邻接矩阵)

2.1. 图的快速入门案例

  • 要求:
    代码实现如下图结构.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值