暂时把题解当成博客吧,本题参考了 作者:Chicago 的题解,写的十分清晰,我的确没想到动态数组。
链接:https://www.acwing.com/solution/content/916/
来源:AcWing
#include<iostream>
#include<vector>
using namespace std;
int n,m;
vector<int> a;
//p是在每一位插入的数
void dfs(int p)
{
//因为每个数只能用一次,如果数组中已有的个数和剩下的能个数小于m,说明无法构成一组答案。
if(a.size()+(n-p+1)<m)
return;
//输出结果
if(a.size()==m){
for(int i=0;i<a.size();i++)
cout<<a[i]<<" ";
cout<<endl;
return;
}
把p插入数组
a.push_back(p);
//已经固定p在该位置,求后面的排序。
dfs(p+1);
当p在该位置时后面所有排列已经在上一句搜索完成,所以删去该位置的p。
a.pop_back();
在该位置后延一个新的值,进行新的搜索。
dfs(p+1);
}
int main()
{
cin>>n>>m;
dfs(1);
return 0;
}