DFS深度优先搜索

深度优先搜索(DFS)是一种搜索策略,用于遍历或搜索树或图。本文通过实例解释了如何使用DFS解决算法问题,包括字符串操作、数列还原和幸运袋子问题,并介绍了剪枝的概念,即在满足特定条件时提前终止搜索,以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是深度优先搜索?

深度优先搜索(DFS)是搜索手段之一。是从某个状态开始不断转移状态直到无法转移为止,然后退回到前一步状态继续转移其他状态,可以想象为一个沿树爬行的虫子,在一个交叉口他会首先随机选择一条分岔路口一直走下去直到死路为止,然后会返回到这个交叉口沿着另一条分支爬行下去,直到遍历所有可能的路径为止。根据这个特点,DFS算法用递归来实现比较简单。

举例说明之:下图是一个无向图,如果我们从A点发起深度优先搜索(以下的访问次序并不是唯一的,第二个点既可以是B也可以是C,D),则我们可能得到如下的一个访问过程:A->B->E(没有路了!回溯到A)->C->F->H->G->D(没有路,最终回溯到A,A也没有未访问的相邻节点,本次搜索结束)。每次深度优先搜索的结果必然是图的一个连通分量。



直接看怎么用dfs解决问题,一道是阿里的面试题,一道是网易的。最后一道是利用剪枝的dfs,也是网易的。因为实现dfs大多时候使用递归,所以题里往往会有n比较小,或者可变的长短比较小等提示。还有一种特殊情况n较大,就是要用到剪枝~

一:

乍一看好像是可以用动态规划来做,但是因为涉及到交换操作,所以dp矩阵没法构造,这道题就是利用dfs来解决的。

假设我们有两个长度相同的字符串:A:[a1,a2,a3...,a5], B:[b1,b2,b3....,b5]。

那么我们选取的深度就是字符串的长度,从头到尾,计算操作的次数,得到最小的结果。

字丑,见谅。

知道每条路怎么走了,接下来就是代码实现

#include<bits/stdc++.h>
usi
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值