组合数生成算法

#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;


bool next_combination(vector<int>& vec,int n)
{
    int k = vec.size() - 1;
    for(;k>=0;k--){
        if(vec[k]<n + k - vec.size() + 1) break;
    }
    if(k<0) return 0;
    vec[k]++;
    for(int i=k+1;i<vec.size();i++)
    {
        vec[k+1] = vec[k]+1;
    }
    return 1;
}

int main(){
    int n,k;
    scanf("%d%d",&n,&k);
    vector<int> vec,vec2,dir;
    for(int i = 1;i<=k;i++){
        vec.push_back(i);
    }
    do{
        for(int i=0;i<vec.size();i++){
            printf("%d ",vec[i]);
        }
        printf("
");
    }
    while(next_combination(vec,n));
}
原文地址:https://www.cnblogs.com/zhjou/p/4758831.html