算法-字典顺序求组合数

字典序求组合数

#include<iostream>
using namespace std;

int num,n,buffer[20];    //n是组合的范围,buffer存储组合的结果,num是挑选的元素个数

void dfs(int k,int j);//j是组合挑选元素的起点
void printDfs();
int t;//t用来记录组合数

int main()
{
    cin>>n>>num;
    dfs(num,1);
    cout<<t;
}

void dfs(int k,int j)//k也是组合的元素个数

{
    if(k==0) {printDfs();return;}

    for(int i=j;i<=n-k+1;++i)
    {
        buffer[num-k+1]=i;
        dfs(k-1,i+1);
    }
}

void printDfs()
{
    ++t;
    for(int i=1;i<=num;++i)
        cout<<buffer[i]<<' ';
    cout<<endl;
}
posted @ 2020-12-20 14:42  七铭的魔法师  阅读(54)  评论(0编辑  收藏  举报