CH0302 递归/非递归实现组合型枚举

描述

从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。n>0,  0<=m<=n,  n+(n-m)<=25。

输入格式

两个整数n,m。

输出格式

按照从小到大的顺序输出所有方案每行1个。

首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 9 12排在1 3 10 11前面)。

样例输入

5 3

样例输出

1 2 3 
1 2 4 
1 2 5 
1 3 4 
1 3 5 
1 4 5 
2 3 4 
2 3 5 
2 4 5 
3 4 5 
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 vector<int>f;
 4 int main()
 5 {
 6     int n,m;
 7     cin>>n>>m;
 8     function<void(int,int)>dfs=[&](int u,int k)
 9     {
10         if(!k)
11         {
12             for(auto &p:f)printf("%d%c",p,' ');
13             printf("\n");
14             return;    
15         }
16         if(u+k>n+1||u>n)return;
17         f.push_back(u);
18         dfs(u+1,k-1);
19         f.pop_back();
20         dfs(u+1,k);    
21     };
22     dfs(1,m);
23     
24     return 0;
25 }

 

上一篇:LGP6326 Shopping 点分治+dp


下一篇:DFS什么时候需要回溯