上一篇我们讲解了图遍历的深度优先搜索DFS,今天讲另外一个图的遍历方法,即广度优先搜索BFS, 广度优先搜索又叫宽度优先搜索,和树的按层遍历的方法是一样的,在便遍历时图和树的区别上一篇文章已经有所讲过不再复述。
广度优先搜索BFS:假设从图中某个顶点V出发, 在访问了V之后一次访问V的各个未曾访问过的邻接点,然后分别从这些邻接点出发,一次访问他们的邻接点;在遍历这些邻接点的时候必须遵从这样的规则:使得先被访问的顶点的邻接点必须先于后被访问的顶点的邻接点。就是说谁先来的谁的子孙就优先于后来的人的子孙进行访问遍历,在树中就是左子树的所有儿子比子树的儿子先被遍历。继续,重复上述过程直到没有可以被访问的顶点。若图为连通图此时所有顶点都已经被遍历过,但是当图为非联通图时,此时还有空余的顶点没有遍历,所有还需要查看是否有剩余未被标记的顶点,然后依次做为起点进行上述过程,直到图中全部顶点都被标记过为止。说白了BFS就是每次都选取相同最短步长的邻接点进行遍历,步长为1, 2, 3, 4......