递归实现组合型枚举

mac2022-06-30  81

从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。

输入格式

两个整数 n,m ,在同一行用空格隔开。

输出格式

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

首先,同一行内的数升序排列,相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。

数据范围

n>0, 0≤m≤n, n+(n−m)≤25

代码:

#include<iostream> using namespace std; int n,m; void dfs(int u,int k,int step) { if(k+n-u<m) return ; if(k==m) {for(int i=0;i<n;i++) if(step>>i&1) cout<<i+1<<" "; cout<<endl; return ; } dfs(u+1,k+1,step|1<<u); dfs(u+1,k,step); } int main() { cin>>n>>m; dfs(0,0,0); return 0; }

 

最新回复(0)