与我前面发的递归实现那一题有点相似
可以看看 94. 递归实现排列型枚举 刷题笔记-CSDN博客
思路 用u记录 选到哪一个位置
一旦选完 就输出
该题 要求升序 我们在选数时加入一个条件
大于上一个选择的数即可
依旧是从小到大搜到符合条件的每一个数
代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
const int N=100;
int st[N];
bool used [N];
void dfs(int u){
if(u>m){
for(int i=1;i<=m;i++){
cout<<st[i];
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++){
if(!used[i]&&i>st[u-1]){
used[i]=true;
st[u]=i;
dfs(u+1);
used[i]=false;
st[u]=0;
}
}
}
int main(){
cin>>n>>m;
dfs(1);
return 0;
}