题目链接
一、标准递归
#include<bits/stdc++.h>
using namespace std;
int N;
int M;
int ans[40];
bool chosen[40];
void print_(int n,int t)//n控制层数
{
if(n == M)
{
for(int i = 0;i < M;++i)
{
cout << ans[i] << ' ';
}
cout << endl;
return;
}
for(int i = t;i <= N;++i)
{
if(!chosen[i])
{
ans[n] = i;
chosen[i] = true;
print_(n + 1,i);
chosen[i] = false;
}
}
}
int main()
{
cin >> N;
cin >> M;
print_(0, 1);
}
正常N叉树,遍历到第M层即可,需要注意,本题答案是有顺序的,按照字典序对答案进行排列。
二、借助vector实现递归
#include<bits/stdc++.h>
using namespace std;
vector <int> ans;
int N,M;
void print(int n){
if(ans.size() > M || (N - n + 1) + ans.size() < M){
return;
}
if(n == N + 1){
for(int i = 0;i < ans.size();++i){
cout << ans[i] << ' ';
}
cout << endl;
return;
}
ans.push_back(n);
print(n + 1);
ans.pop_back();
print(n + 1);
}
int main()
{
cin >> N;
cin >> M;
print(1);
}