前言
深度优先搜算算法,又称DFS(Depth First Search)。DFS算法是一种搜索算法,而搜索算法实质上是一种枚举,即借助计算机的高性能来有目的地枚举一个问题的部分情况或这个问题的所有情况,进而求出问题的解的一种方法。
一、全排列问题
首先的思路是,先对第一个数遍历(1,2,3)
拿1举例:
第一个空位选择1,标记[1]被使用;
第二个空位选没有被标记过的数字2,并且对2标记;
第三个空位选择没有被标记的数字,只能选择3;
三个位置都被填满后,取消对3的标记;
取消对2的标记;
输出结果:1 2 3;
并且返回第二个空位;
第二个空位选择没有被标记的数字3,并且对3标记;
第三个空位选择没有被标记的数字,只能选择2;
三个位置都被填满后,取消对2的标记;
取消对3的标记;
输出结果:1 3 2;
并且返回第二个空位;
进行完以上操作后,取消对1的标记,并且返回第一个空位
以此类推……;
代码如下:
#include<iostream>
using namespace std;
const int N = 10;
int n;
int p[N];
bool st[N];
void dfs(int step){
if(step == n ){
for(int i = 0; i < n;i ++ ) cout << p[i] <<