#include<iostream>
using namespace std;
void comeb_back(int m,int r)
{
int *p=new int[r];//创建一个新的数存储组构成组合的3个数
int i=0;
p[0]=1;
do
{
if(p[i]-i<=m-r+1)//p[i]的最大值是(m-r)+(1+i)
{
if(i==r-1)
{
for(int k=0;k<r;k++)
cout<<p[k];
cout<<endl;
p[i]++;
}
else
{
i++;//向前试探
p[i]=p[i-1]+1;
continue;
}
}
else
{//回溯
if(i==0)//已全部找到
return ;
else
p[--i]++;
}
}while(1);
}
int main()
{
int m,r;
cin>>m>>r;
comeb_back(m,r);
return 0;
}
回溯——数的组合
最新推荐文章于 2022-06-17 18:48:43 发布