https://www.acwing.com/problem/content/94/
#include<bits/stdc++.h>
using namespace std;
int a[20],vis[20];
int n;
void dfs(int u){
if(u>n){
for(int i=1;i<=n;i++){
if(vis[i]) cout<<i<<' ';
}
cout<<'\n';
return;
}
vis[u]=true;
dfs(u+1);
vis[u]=false;
dfs(u+1);
}
int main(){
cin>>n;
dfs(1);
return 0;
}
不升序
#include<bits/stdc++.h>
using namespace std;
int vis[20],a[20];
int n;
void dfs(int pos,int tar){
if(pos>tar){
for(int i=1;i<=tar;i++) cout<<a[i]<<' ';
cout<<'\n';
return;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
a[pos]=i;
vis[i]=true;
dfs(pos+1,tar);
vis[i]=false;
}
}
}
int main(){
cin>>n;
cout<<'\n';
for(int i=1;i<=n;i++)dfs(1,i);
return 0;
}