1. 图的遍历
从图中的某个顶点出发,按某方法多图中的所有结点访问且访问一次。
2. 图的复杂性
顶点关系任意、多对多的关系、连通图与非连通图、孤立结点、回路。
3. 访问标识数组visited[n]
为每一个顶点设置一个一个访问标识visited[i] ,初值设为0表示未访问,一旦访问则设为1表示已访问。
4. 遍历方法:深度优先搜索、广度优先搜索
深度优先搜索(DFS)
深度优先搜索(DFS):类似树的先根遍历
(1) 基本思想
选择一个顶点作为起始点,首先访问该顶点。
依次以该顶点的邻接点作为出发点,深度优先搜索邻接点。
对于非连通图,再选一个未搜索过的顶点作为起始点,重复进行。
举例:
按先左后右的深度优先搜索结果为:
A,B,C,F,D,G,E,H,I
按先右后左的深度优先搜索结果为:
A,E,G,H,I,D,B,C,F
(2) 深度优先搜索连通子图的递归算法
① 访问出发点v0,并置访问标识;
② 依次深度优先遍历v0的邻接点。
邻接表存储事例
(3) 深度优先搜索连通子图的非递归算法
① 首先将v0入栈;
② 只要栈不为空:
处理栈顶:栈顶顶点出栈,如果未访问,则访问并置访问标识;
处理邻近点:然后将该顶点所有未访问的邻接点入栈。
广度优先搜索(BFS)
广度优先搜索(BFS):类似树的层次遍历
(1) 基本思想
从图中某个顶点v0出发,首先访问v0。
依次访问v0的各个未被访问的邻接点。
依次以v0的各个未被访问的邻接点为出发点,广度优先搜索。
对于非连通图,再选一个未搜索过的顶点作为起始点,重复进行。
举例:
(2) 广度优先搜索连通子图的算法思想
① 首先访问v0并置访问标识,然后将v0入队;
② 只要队不为空,则重复下述处理:
a.队头结点v出队;
b.对v的所有邻接点w,如果w未访问,则访问w并置访问标识,然后将w入队。
举例:
欢迎大家加我微信交流讨论(请备注csdn上添加)