DFS、回溯算法与 Hierholzer 算法的简单区别:
- 回溯时的处理不同:它们的主要区别不在于是否会回溯,因为 DFS 与 Hierholzer 算法也会回溯。
- DFS 会将已经访问过的顶点标记为不可再次访问,且不会再撤销,从而使得可搜索路径越来越少。当发现当前顶点没有下一个可访问的顶点时,DFS 会回溯到之前访问的顶点继续查找其有没有下一个可访问的顶点,如果没有则继续回溯,直到全部顶点都访问到为止。
- 回溯算法向前的每一步都会去设置某个状态,而当向前走走不通的时候会进行回溯,回溯时需要把之前设置的状态撤销掉。
- Hierholzer 算法则是使用了 DFS,只是不同的是如果当前顶点没有下一个可访问的顶点时,Hierholzer 算法会将当前顶点入栈。
- 最后产生的结果不同
- 对于同一张图,相同的起点,DFS 只会找到一条路径。
- 而回溯算法可以找到可能的全部路径,也包括 DFS 找到的那条路径。
- Hierholzer 算法则会找到欧拉路径或欧拉回路。
- 回溯法(back tracking),回溯算法是树的算法。
- DFS, 即深度优先遍历,它是图的算法。
- Hierholzer 算法,它是欧拉图和半欧拉图的算法。
最后强调一点:是否递归跟算法毫无关系,递归只是算法的一种实现方式,任何递归实现都可以通过迭代来实现。