图的遍历
对于图的遍历,需要科学地设计遍历方案,通常有两种遍历次序方案:深度优先遍历和广度优先遍历。
深度优先遍历
深度优先遍历( Depthfirstsearch),也有称为深度优先搜索,简称为DFS。
- 我们可以约定右手原则:在没有碰到重复顶点的情况下,分叉路口始终是向右手边走,每路过一个顶点就做一个记号。深度优先遍历其实就是一个递归的过程。
- 它的具体思想类似找钥匙方案,无论从哪一间房间开始都可以,将间内的墙角床头柜、床上、床下、衣柜、电视柜等挨个寻找,做到不放过任何一个死角,当所有的抽屉、储藏柜中全部都找遍,接着再寻找下一个房间。
一些相关的知识点
- 回溯法
之前我们谈过回溯法,还是那句话,指导思想很简单,就是一条路走到黑,碰壁了再回来一条路走到黑,一般和递归可以很好的搭配使用,还有深度优先搜索(DFS)。 - 密尔顿路径
一图G中的哈密尔顿路径指的是经过图G中每个顶点且只经过一次的一条轨迹。如果这条轨迹是一条闭合的路径(从起点出发不重复地遍历所有点后仍能回到起始点),那么这条路径称为哈密尔顿回路。
广度优先遍历
广度优先遍历( Breadthfirstsearch),又称为广度优先搜索,简称BFS。
- 如果以之前我们找钥匙的例子来讲,运用深度优先遍历意味着要先彻底查找完一个房间再开始另一个房间的搜索。
但我们知道,钥匙放在沙发地下等犄角旮旯的可能性极低,因此我们运用新的方案:先看看钥匙是否放在各个房间的显眼位置,如果没有,再看看各个房间的抽屉有没有。这样逐步扩大查找的范围的方式我们称为广度优先遍历。
可以用队列来实现