什么是深度优先搜索?
深度优先搜索(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