DFS是相对于BFS的另一个中图搜索算法,
其与BFS最大的不同在于它是深度优先,
它会优先顺着一条路径走到底,一旦某个节点邻接的节点都被发现了,就会回溯到前面一个节点,直到这个点的邻接节点都被发现,然后再回溯到前面一个节点,如此类推。
DFS也采用三种颜色来做标记,
白色 = 未发现
灰色 = 已发现
黑色 = 邻接全部已发现
这点和BFS一样,BFS的文章见 https://blog.youkuaiyun.com/whut2010hj/article/details/81946433
这是一个递归的过程。可以用递归的代码来实现,也可以用栈这种数据结构来实现递归的操作,相比于BFS使用的是队列。
很尴尬的伪代码如下,中文版伪代码=。=
对于图中的每个节点u
设u 颜色为白
设u 父节点为null
对于图中的每个节点u
如果u 是白色的
在图中从u 出发执行下面定义的DFS-VISIT(图,u)
DFS-VISIT(图,u)
将u的颜色设为灰
对于与u 邻接的每个节点v
如果v 的颜色为白
将v 的父节点设为u
在图中从v 出发执行DFS-VISIT(图,v)
将u 的颜色设为黑
DFS解题的例子:https://leetcode.com/problemset/all/?topicSlugs=depth-first-search
全排列问题