题解
#include <iostream>
using namespace std;
int used[30];
int state[30];
int n,m;
void dfs(int u,int start) {//start 是为了递增
if(u>m){//判断标准是 m 个选够,而非 n 个遍历完
for(int i=1;i<=m;i++)
cout << state[i] << " ";
cout << endl;
return;
}
for(int i=start;i<=n;i++){//组合型的实现:递增地选取数字
if(used[i]==0){
state[u]=i;//n,m,u,i 四个下标区分好
used[i]=1;
dfs(u+1,i+1);
//还原现场
state[u]=0;
used[i]=0;
}
}
}
int main(){
cin >> n >> m;
dfs(1,1);
return 0;
}
时间复杂度
?