前言
DFS
对应一颗搜索树,其空间复杂度低,搜索特点是“不撞南墙不回头”。
一、题目陈述
二、解决思路
使用DFS
进行搜索。
三、代码实现
#include<iostream>
using namespace std;
const int N = 10;
// path数组记录当前方案
int path[N];
// st[i]值为false代表i在目前方案中还没有被选择
bool st[N];
int n;
void dfs(int u) {
if(u==n) {
for(int i=0;i<n;i++) {
cout<<path[i]<<' ';
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++) {
if(!st[i]) {
st[i]=true;
path[u]=i;
dfs(u+1);
// 因为其他方案还要用到这个数,所以要恢复现场
st[i]=false;
}
}
}
int main() {
cin>>n;
// u代表着已经确定了n个数
dfs(0);
return 0;
}
总结
DFS
模板题,DFS
利用系统的栈来实现,注意边界条件的设置和恢复现场的代码。