图是数据结构中非常重要的逻辑结构,在开发中使用也非常广泛,下面一起讨论图生成树、森林的过程,以及图的存储结构。
一、图生成树
1、深度遍历
1、某一节点为起始点;
2、以该点的任意边所连接的节点(不能是已经称为目标节点的节点,但是可以原路返回上一个起始点)为目标节点,确定路径并且标记;
3、去除多余路径的线;
(1)、确定起始点(这里以A为起始点)
(2)、开始标记路径
(3)、去除多余边
2、广度遍历
1、广度遍历和深度遍历不同,是对某一个节点的所有的邻接点进行遍历;
2、依次对每一个子节点再进行广度遍历。
(1)、确定起始点(以A为起始点)
(2)、确定起始点的边
(3)、确定每一个邻接点的边(如果邻接点已经被用了,则不能联系起来)
(4)、去除多余的边
二、图生成森林
图生成森林的前提是,该图由若干个连通分量(见下文解释)或者强连通分量(见下文解释)组成,对每一个连通分量、强联通分量进行 “图生成树” 操作即可。
1、深度遍历
2、广度遍历
注:图生成的树、森林均是不唯一的。
三、存储结构
1、邻接矩阵
在n个节点的 图E 中,根据每个节点是否与另外节点相连来确定与其他节点的关系,并且记录在矩阵中。
2、邻接表
每一个节点记录该结点子节点的索引
四、图的基本术语:
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个图都称为强连通分量。