蓝桥杯-DFS day2

 DFS基本思路

DFS模型:

DFS是回溯法的具体应用的一种,中文名称为深度优先搜索。DFS从起始节点开始,沿着一条路径尽可能的深入搜索(也就是一条路走到头),直到无法继续为止,然后回溯到前一个节点,继续探索其他路径,直到遍历完整个图或树

举个例子

假如我们要将1 2 3三个数全排列,第一个数字可能为123中的任意一个,首先考虑第一个数字为1,之后第二个数有两个选择,我们先选择第二个数为2,再顺着这条路径走下去,第三个数只能为3,完成这条路径后,我们回到上一个分叉点,也就是第二个位置的选择上去,这次我们将第二个数选择为3,第三个数就只能为2,到此为止,第二个数的分叉我们已经全部考虑完毕,紧接着,我们回到第一个数字的分叉点上,这次我们选择第一个数字为2,接着考虑第二个点,第二个点可以是1或者3,再选择一条分支继续前行,重复以上过程,我们就能够找到其全排列。

DFS模版:

以下是一个求解1~N全排列的模版

int a[N];
bool vis[N];
void dfs(int dep){
    if(dep==n+1){
        for(int i=1;i<=n;++i) cout<

你可能感兴趣的:(深度优先,算法,c++,蓝桥杯,数据结构,dfs,深度优先遍历)