找出从自然数1,2,。。。,n中任取r个数的所有组合。
例如n=5,r=3的所有组合为:
(1) 1,2,3 (2) 1,2,4 (3) 1,2,5 (4)1,3,4 (5) 1,3,5
(6) 1,4,5 (7) 2,3,4 (8)2,3,5 (9) 2,4,5 (10) 3,4,5
输入
n=5,r=3
输出
1- 5中所有3个数的组合
#include <iostream>
using namespace std;
int number[10];
void callback(int m,int r)
{
int i,j;
i = 0;
number[i] = 1;
for(;;)
{
if(number[i]-i <= m-r+1) /*还能向前试探*/
{
if(i==r-1) /*已经找到一个可行的组合解*/
{
for(j=0;j<r;j++)
cout<<number[j]<<" ";
cout<<endl;
number[i]++; /*调整*/
continue;
}
i++; /*扩展,向前试探*/
number[i] = number[i-1]+1;
}
else /*不能试探,理应回溯*/
{
if(i==0) return; /*找到所有可行的解,结束*/
++i;
number[i]++; /*调整,向后回溯*/
}
}
}
int main()
{
int N,R;
cin>>N>>R;
callback(N,R);
return 0;
}
/