1. DFS输出1-n的全排列(acwing 842)
思路:输出排列方法,用DFS递归每一个搜索过程,用st记录每个数字有没有被访问。
注意1.path不能用vector表示
dfs函数中,参数x表示选中的第几个数,不用return来回溯,如果用return回溯,就相当于图的遍历。如果选中大于n个数,函数会直接结束。
还要用一个path数组,记录路径。这里路径是选中的数,必须选到结尾后再一起输出。
# include<bits/stdc++.h>
using namespace std;
int n;
const int N = 10;
bool st[N];
int path[N];
void dfs(int x)
{
if(x == n)
{
for (int i = 0; i < n; i ++ )
cout<<path[i]<<" ";
cout<<endl;
}
for (int i = 1; i <= n; i ++ )
if(!st[i])
{
st[i] = true;
path[x] = i;
dfs(x+1);
st[i] = false;
}
}
int main()
{
scanf("%d", &n);
dfs(0);
}
2. n-皇后问题