已知邻接表为:
从定点0出发,求该图的深度优先遍历和广度优先遍历
深度优先遍历
深度优先遍历(DFS)是一种递归算法,它从图的某个顶点开始遍历,沿着一条路径走到底,直到不能再走为止,然后回溯到上一个节点,继续遍历其他路径,直到遍历完整个图。
1.
两个顶点之间有边的话,在邻接表中就是1,无边的话就是0.
从0开始出发,由图可知,0与1之间有边,所以就将0,1填入下表。
0(上一个顶点) | ||||||
0 | 1(新遍历的顶点) |
2.
然后查找与1有边的顶点,发现有三个,分别是0,3,6。因为已经遍历过的顶点不在进行遍历,所以,就剩下3和6,遍历最近的那个顶点,这里遍历3,将3写入表中。
0 | 1(上一个顶点) | |||||
0 | 1 | 3(新遍历的顶点) |
3
查找与3有边的第一个顶点(前面遍历过的不在遍历),所以由图可知,这次遍历顶点4.
0 | 1 | 3(上一个顶点) | ||||
0 | 1 | 3 | 4(新遍历的顶点) |
4
查找与4有边的第一个顶点,发现是2,所以这次遍历的顶点是2.
0 | 1 | 3 | 4(上一个顶点) | |||
0 | 1 | 3 | 4 | 2(新遍历的顶点) |
5
查找与2有边的第一个顶点,发现全部都被遍历过了,这是我们要返回到上一个顶点,去查看与它有边的顶点是否全部遍历过了,若全部遍历过,则再次进行回溯,直至回溯到有没被遍历过的顶点位置。这题中,回溯至4,可以发现,4与5之间有边,故这次遍历的顶点是5.
0 | 1 | 3 | 4 | 4(上一个顶点) | ||
0 | 1 | 3 | 4 | 2 | 5(新遍历的顶点) |
6
查找与5有边的第一个顶点,发现除了顶点6,其它的全部都已经被遍历过了,故这次遍历的定点就是6.
0 | 1 | 3 | 4 | 4 | ||
0 | 1 | 3 | 4 | 2 | 5 | 6(新遍历的顶点) |
这是全部的顶点都已经被遍历过了,所以深度优先遍历顺序是,0,1,3,4,2,5,6.
广度优先遍历
广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去。相当于层次遍历,一层一层的进行遍历。
已知邻接表:
从0开始遍历,找到与0有边的所有顶点,全部进行遍历,由图可知,与0有边的顶点有1,2,3,4,6。所以将这几个顶点依次填入下表:
因为广度优先遍历是按层进行遍历,所以不需要再进行回溯操作。
0 | 1 | 2 | 3 | 4 | 6 |
找到从0开始遍历的第一个顶点,这里是顶点1,所以在1中找还没有遍历过的顶点,由图发现与顶点1有边的顶点全部都已经被遍历过,然后找第二个遍历的顶点,这里是顶点2,发现与二有边的顶点也全部被遍历过,再找第三个,这里是顶点3,发现5还没被遍历过,所以最后一个空填5.
0 | 1 | 2 | 3 | 4 | 6 | 5 |
到此,广度优先遍历遍历结束:
广度优先遍历的顺序是:0,1,2,3,4,6,5