#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
//深度优先搜索
bool visited[15];//标记数组
int f[15];
int num[15];
int n;
/*
把f[step]当成箱子
*/
void dfs(int step){//传入的是数组的下标
if(step>n){//当到达n+1是说明前n个已经拍完序
int i = 1;///控制前导0
while(!f[i])
i++;
for(;i<=n;i++)
cout<<f[i];
cout<<endl;
return;//返回距离最近的递归
}
for(int i = 1;i<=n;i++)
if(!visited[i]){//当visited[i]为false是代表还没有被使用
f[step] = num[i];//把num[i]的值赋值给第step个箱子
visited[i] = true;//把visited[i]置为true代表已经访问过
dfs(step+1);
visited[i] = false;//回溯,回到上一个位置,将visited[i]重置为false
}
return;
}
int main(){
cin>>n;
memset(visited,false,sizeof(visited));
memset(f,0,sizeof(f));
memset(num,0,sizeof(num));
for(int i = 1;i<=n;i++)
cin>>num[i];
sort(num+1,num+n+1,less<int>());//排序,从小到大,例如 5 3 6 1 输出的顺序是 1 3 5 6
dfs(1);//传入的是num数组的下标,从1开始
return 0;
}
大牛的博客
详细步骤