1.每一位选或者不选,凑足m位或者到顶了则退出
2.用一个bool数组来保证无重复
3.从头往后遍历,可以保证每组升序
C++ 代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m;
int q[50];
vector<int> temp;
void dfs(int num,int start)
{
if(num==m)
{
for(auto i:temp)
{
cout<<i<<' ';
}
cout<<endl;return ;
}
if(start>=n) return ;
bool visit[50];
memset(visit,false,sizeof visit);
for(int i=start;i<n;i++)
{
if(!visit[q[i]])
{
temp.push_back(q[i]);
dfs(num+1,i+1) ;
temp.pop_back();
visit[q[i]]=true;
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>q[i];
sort(q,q+n);
dfs(0,0);
return 0;
}
blablabla
```