给定一个数组,n个数,打印所有可能的r位数的组合。例如{1,2,3,4}n=4,r=2.输出{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}

来源:互联网 发布:淘宝白色长连衣裙 编辑:程序博客网 时间:2024/06/06 02:41
/*给定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;}}

0 0
原创粉丝点击