基本介绍
图是由一组顶点和能够将两个顶点相连的边组成的。如下图所示:
根据连接两个顶点边的不同,图可以分为以下两种:
- 无向图:边仅连接顶点,没有方向。
- 有向图:边不仅连接顶点,同时具有方向。
相关术语
- 相邻顶点:当两个顶点通过一条边相连时,我们称这两个顶点是相邻的,并且称这条边依附于这两个顶点。
- 度:某个顶点的度就是依附于该顶点的边的个数
- 子图:是一幅图的所有边的子集(包含这些边依附的顶点)组成的图;
- 路径:是由边顺序连接的一系列的顶点组成
- 环:是一条至少含有一条边且终点和起点相同的路径
- 连通图:如果图中任意一个顶点都存在一条路径到达另外一个顶点,那么这幅图就称之为连通图
- 连通子图:一个非连通图由若干连通的部分组成,每一个连通的部分都可以称为该图的连通子图
图的实现
图有两种实现方式,分别是使用邻接矩阵和邻接表。邻接矩阵由于其空间复杂度较大(O(n^2)),所以我们一般采用邻接表。邻接表图示如下:
由图可知,邻接表是一个数组对象,其中每个对象,都是一个queue,用于存储与其相邻的顶点。
图的搜索
图有两种搜索方式:深度优先和广度优先。
所谓的深度优先搜索,指的是在搜索时,如果遇到一个结点既有子结点,又有兄弟结点,那么先找子结点,然后找兄弟结点。
所谓的深度优先搜索,指的是在搜索时,如果遇到一个结点既有子结点,又有兄弟结点,那么先找兄弟结点,然后找子结点。