组合的输出

【问题描述】
    排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<n),我们可以简单地将n个元素理解为自然数12n,从中任取r个数。
    现要求你用递归的方法输出所有组合。
    例如n5r3,所有组合为:
    l 2 3   l 2 4   1 2 5   l 3 4   l 3 5   1 4 5   2 3 4   2 3 5   2 4 5   3 4 5
【输入】
    一行两个自然数nr(1<n<211<r<n)
【输出】
   所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
【样例】
compages.in       compages.out
5   3                                           1 2 3
       1 2 4
       1 2 5
       1 3 4
       1 3 5
       1 4 5
       2 3 4
       2 3 5
       2 4 5
       3 4 5
 #include<iostream>
 #include<cstdio>
 #include<cstring>
 #include<string>
 #include<algorithm>
 #include<cmath>
 using namespace std; 
 int n,c,a[1000]={1};bool b[1000];
 void dfs(int);
 void print();
 int main()
 {
     cin>>n>>c;
     dfs(1);
     return 0;
 }
 void dfs(int q)
 {
     int i;
     for(i=a[q-1];i<=n;i++)
     {
         if(!b[i])
         {
             a[q]=i;
             b[i]=1;
             if(q<c)dfs(q+1);
             else print();
             b[i]=0;
        }
    }
 }
 void print()
 {
     for(int i=1;i<=c;i++)
     {
         cout<<a[i]<<" ";
     }
     cout<<endl;
 }

 

posted @ 2017-03-24 14:21  zzzzx  阅读(318)  评论(0编辑  收藏  举报