深度优先搜索(DFS)

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

全排列问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值