此题可以用y总在算法基础课讲过的模板来写,加一个条件剪枝即可
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
const int N = 30;
int n, m, a[N], flag;
bool st[N];
void dfs(int u)
{
//增加此条件有很多好处,一可以正序排序,二可以减少运算量等
if(a[u - 2] > a[u - 1]) return;
if(u == m + 1){
for(int i = 1; i <= m; i ++) cout << a[i] << " ";
cout << endl;
return;
}
for(int i = 1; i <= n; i ++){
if(!st[i]){
st[i] = true;
a[u] = i;
dfs(u + 1);
st[i] = false;
}
}
}
int main()
{
cin >> n >> m;
dfs(1);
}