刚刚学了深度优先搜索,找了道题试做了一下
先贴代码
#include<iostream>
using namespace std;
int n;
int aa[100000];//数组开大一点,表示1———n,这几个数
int book[1000010]={0};//用来标记1——n这几个数是否被用过,避免重复
void dfs(int step){//这道题可以理解为像n个盒子里填数,step表示站在第几个盒子前
if(step>n){//若当前的step比最后一个盒子还大,就说明n个盒子已经填完数了,下面用for循环依次输出盒子里的数
for(int i=1;i<=n;i++){
cout<<" "<<aa[i];//注意空格加在数字前,建议直接复制这几个空格
}cout<<endl;//换行
return;//回到上一次调用函数的地方,这个return可有可无
}else{
for(int i=1;i<=n;i++){//现在站在第step个盒子前,开始把数字从1——n开始试
if(book[i]==0){//若数字i没有被用过
aa[step]=i;//则把数字i放进第step个aa盒子里
book[i]=1;//并标记这个数字已经用过
dfs(step+1);//站到下一个盒子面前.....递归
book[i]=0;//这里记着把数字还原成未使用状态,因为外层大循环还要使用
}
}
}return;//return结束掉dfs函数
}
int main(){
cin>>n;
dfs(1);从第一个盒子前开始...
return 0;
}
原文:https://www.cnblogs.com/heroliu/p/10352318.html