#include<iostream>
#include<vector>
using namespace std;
int n;
/*void dfs(int u,int state)
{
if(u==n)
{
for(int i=0;i<n;i++)
if( state>>i & 1)
cout<<i+1<<" ";
cout<<endl;
return ;
}
dfs(u+1,state);
dfs(u+1,state| 1<<u);
}*/
vector<int>ans;
void dfs( int start,int n,int m)
{
if(!m)
{
for(auto p:ans)cout<<p<<" ";//选够了就打印结果
cout<<endl;
return;
}
if(start==n+1)return;//如果说当前数超过了n而且还没选够就是不合法方案;
for(int i=start;i<=n;i++)
{
ans.push_back(i);
dfs(i+1,n,m-1);//枚举下一个数字
ans.pop_back();//回溯
}
}
int main()
{
cout<<endl;
cin>>n;
for(int i=1;i<=n;i++)
{
dfs(1,n,i);//可以当成通项公式从n个数选m个组合。
}
return 0;
}
ACwing 92. 递归实现指数型枚举(二进制与非二进制)
最新推荐文章于 2022-09-06 18:08:58 发布