/*
给定n个数字,打印r位数据组成的数
如{1,2,3,4}
n=4,r=2;
输出{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}
*/
#include<vector>
#include<iostream>
using namespace std;
void Combination(int arr[],int data[],int start,int end,int index,int r,vector< vector<int> >& result)
{
if(index==r)
{
vector<int> path;
for(int j=0; j<r;j++)
{
path.push_back(data[j]);
}
result.push_back(path);
return;
}
for(int i=start; i<=end&&end-i+1>=r-index; i++)
{
data[index]=arr[i];
Combination(arr,data,i+1,end,index+1,r,result);
}
}
void PrintCombination(int arr[],int n,int r,vector<vector<int> >& result)
{
int* data=new int[r];
if(n<r)
return;
Combination(arr,data,0,n-1,0,r,result);
delete[] data;
}
void main()
{
vector<vector<int> > result;
int arr[4]={1,2,3,4};
PrintCombination(arr,4,2,result);
for(int i=0; i<result.size(); i++)
{
for(int j=0; j<result[i].size(); j++)
{
cout<<result[i][j]<<" ";
}
cout<<endl;
}
}