组合数的生成(II)

#include <iostream>
#include <cstdio>
#define maxn 1000
using namespace std;

int hash[maxn];
int b[maxn];
int r, n;

void dfs(int lev){
    if(lev > r){
        for(int i = 1; i <= r; i++){
            printf("%d ", b[i]);
        }
        printf("\n");
        return ;//回溯
    }
    for(int j = 1; j <= n; j++){
        if(!hash[j] && j > b[lev-1]){//标记,控制后面的数比前面的数大。
            b[lev] = j;
            hash[j] = 1;
            dfs(lev+1);
            hash[j] = 0;//回溯
        }
    }
}

int main()
{
    while(scanf("%d%d", &n, &r) != EOF){
        dfs(1);
    }
    return 0;
}

你可能感兴趣的:(组合数的生成(II))