数据结构 - 图生成树、森林,以及图的存储结构

332 阅读4分钟

图是数据结构中非常重要的逻辑结构,在开发中使用也非常广泛,下面一起讨论图生成树、森林的过程,以及图的存储结构。

一、图生成树

1、深度遍历

1、某一节点为起始点;

2、以该点的任意边所连接的节点(不能是已经称为目标节点的节点,但是可以原路返回上一个起始点)为目标节点,确定路径并且标记;

3、去除多余路径的线;

image.png

(1)、确定起始点(这里以A为起始点)

(2)、开始标记路径

image.png

(3)、去除多余边

image.png

2、广度遍历

1、广度遍历和深度遍历不同,是对某一个节点的所有的邻接点进行遍历;

2、依次对每一个子节点再进行广度遍历。

image.png

(1)、确定起始点(以A为起始点)

(2)、确定起始点的边

image.png

(3)、确定每一个邻接点的边(如果邻接点已经被用了,则不能联系起来)

image.png

(4)、去除多余的边

image.png

二、图生成森林

图生成森林的前提是,该图由若干个连通分量(见下文解释)或者强连通分量(见下文解释)组成,对每一个连通分量、强联通分量进行 “图生成树” 操作即可。

1、深度遍历

2、广度遍历

注:图生成的树、森林均是不唯一的。

三、存储结构

image.png

1、邻接矩阵

在n个节点的 图E 中,根据每个节点是否与另外节点相连来确定与其他节点的关系,并且记录在矩阵中。

image.png

2、邻接表

每一个节点记录该结点子节点的索引

image.png

四、图的基本术语:

1、子图

图e ∈ 图E 的时候,称 图e 为 图E 的子图。当 图E 为有向图时,需要区分箭头是否同向。

2、无向完全图和有向完全图

某无向图E 中的任意两个节点之间都有连接线称为无向完全图;
某有向图E 中的任意两个节点之间都有连接线(必须有双向的箭头)称为有向完全图。

3、稀疏图和稠密图

某图E 中有很少的边,称为稀疏图;相反为稠密图。

4、权和网

某图E 中的边都有标记表示某种意义的值,用来表示节点距离或耗费,该值称为权,该图也称为网。

5、邻接点

某无向图E 中一个边连接的两个节点(v1,v2),则称v1,v2为邻接点。

6、度、入度、出度

某无向图E 中某个节点连接的边的总数称的度;
某有向图E 中指向某个节点的边的数量称为入度;
某有向图E 中某个节点向外指出的边的数量称为出度。

7、路径和路径长度

某图E 中任意两个节点间组成一条路径的节点的集合(v1,v2,v3...)称为路径;
某图E 中任意两个节点间组成一条路径的边的数量称为路径长度。

8、回路或环

某图E 中第一个节点和最后一个节点相同称为回路或环。

9、简单路径、简单回路、简单环

除了第一个顶点和最后一个顶点相同外,其他的顶点不存在相同的路径,称为简单回路,也就是简单环。

10、连通、连通图和连通分量

某无向图E 任意两个顶点都有路径能够表示,则说明该图是连通的,也称为连通图;
某无向图E(由n图组成) 不能达到任意两个顶点都有路径能够表示,则不具有连通关系,这n个图都称为连通分量。

11、强连通图和强连通分量

某有向图E 任意两个顶点都有路径能够表示,则说明该图是连通的,也称为强连通图;
某有向图E(由n图组成) 不能达到任意两个顶点都有路径能够表示,则不具有连通关系,这n个图都称为强连通分量。