题目链接
这是一道深搜的典型问题
其实也可以用while和for做,但比较复杂,需要n重循环。
二话不说,上AC代码
#include <bits/stdc++.h>
using namespace std;
int a[1001],n;
bool check(int dep){//判断是否重复
for(int i=1;i<dep;i++){//注意是<dep
if(a[i]==a[dep]) return 0;
}
return 1;
}
void print(){//输出
for(int i=1;i<n;i++){
cout<<a[i]<<" ";
}
cout<<a[n]<<endl;
}
void work(int dep){
if(dep>n){
print();
return;
}
for(int i=n;i>=1;i--){
a[dep]=i;
if(check(dep)==1) work(dep+1);
}
}
int main() {
cin>>n;
work(1);
return 0;
}