Cod sursa(job #2304847)

Utilizator Salamandra01Felmeri Zsolt Salamandra01 Data 18 decembrie 2018 18:21:20
Problema Combinari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>

using namespace std;
int n, p;
int ST[20];

bool lepes(int k)
{
    if(ST[k] < n){
        ST[k]++;
        return true;
    }
    return false;
}

bool ellenorzes(int k)
{
    for(int i = 1; i < k; ++i){
        if(ST[k] <= ST[i]){
            return false;
        }
    }
    return true;
}

bool megoldas(int k)
{
    return k == p;
}

void backTracking()
{
    int k = 1;
    bool van, jo;

    ST[k] = 0;
    while(k){
        do{
            van = lepes(k);
            if(van){
                jo = ellenorzes(k);
            }
        }while(van && !jo);
        if(van){
            if(megoldas(k)){
                for(int i = 1; i <= k; ++i){
                    printf("%d ", ST[i]);
                }
                printf("\n");
            }
            else{
                k++;
                ST[k] = 0;
            }
        }
        else{
            k--;
        }
    }
}

int main()
{
    freopen("combinari.in", "r", stdin);
    freopen("combinari.out", "w", stdout);

    scanf("%d%d", &n, &p);
    backTracking();

    return 0;
}