(五) 图

这是动脑学院的"java版数据结构和算法"的学习笔记

1 图的概念

图(Graph)是由定点的有穷非空集合和顶点之间边的集合组成,通常表示为 G(V,E)。G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

2 图的特性

  • 图中的数据元素,称为顶点(Vertext)
  • 图中任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。

3 无向图

  • 无向边 (Edge): 顶点vi到vj之间的边没有方向,用无序偶对(vi,vj)来表示
  • 无向图(Undirected graphs):图中任意两个顶 点的边都是无向边
  • 无向完全图: 无向图中,如果任意两个顶点之间都存在边 (如下图)

完全无向图

4 有向图

  • 有向边:从顶点vi到vj的边有方向,则叫有向边,也叫弧(Arc)。 用有序偶<vi,vj>来表示,vi称为弧尾(Tail), vj称为弧头(Head)
  • 有向图: 图中任意两个顶点的边都是有向边。
  • 有向完全图: 如果任意两个顶点之间都存在方向互为相互的两条边(如下图)有向完全图

5 图的权(Weight)

  • :这种与图的边或弧相关的数叫做权在这里插入图片描述

6 连通图

  • 在无向图G中,如果顶点vi到vj有路径,则称vi和vj是连通的
  • 对于图中任意两个顶点vi,vj,都是连通的,则G为连通图
  • 图1不是连通图, 图2是连通图

7 图顶点的度

  • 无向图顶点的边数叫度
  • 有向图顶点的边数叫出度和入度

8 图的存储结构

8.1 图的邻接矩阵
  • 图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。
  • 一个一维数组存储图中顶点信息
  • 一个二维数组(称为邻接矩阵)存储图中的边或弧的信息
8.2 无向图的邻接矩阵

在这里插入图片描述

8.3 有向图的邻接矩阵

在这里插入图片描述

8.4 带权邻接矩阵

在这里插入图片描述

8.5 浪费的邻接矩阵

8.6 邻接表

在树中,我们讲到了一种孩子表示法, 将结点存入数组,并对结点的孩子进行链式存储,不管有多少孩子,也不会存在空间浪费问题,这个思路同样适用于图的存储。我们把这种数组与链表相结合的存储方法称为邻接表

8.7 无向图的邻接表

在这里插入图片描述

8.8 有向图的邻接表
  • 正邻接表
  • 逆邻接表
    在这里插入图片描述
8.9 带权值邻接表

在这里插入图片描述

9 图的遍历

  • 从图中某一顶点出发遍访图中其余顶点,且使每一个顶点仅被访问一次
9.1 深度优先遍历
  • 深度优先遍历(Depth_First_Search), 简称DFS
  • 从图中某个顶点v除法,访问此顶点,然后从v的未被访问的邻接点出发优先遍历图,直至图中所有和v有路径相通的顶点都被访问到。
    在这里插入图片描述

对上面的图,我们进行拆解成树
在这里插入图片描述
深度遍历算法思想:

  • 为了防止重复遍历,需对已经遍历过的点做一个标记
  • 要深度遍历某个树,先遍历根节点,再深度遍历第一个子树,然后继续深度遍历其所有的子树

按深度进行遍历过程:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值