Cod sursa(job #2222645)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 17 iulie 2018 16:44:56
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
int st[15],fr[15],n,i,k=0;
void init()
{
    st[++k]=0;
    fr[0]++;
}
bool succesor()
{
    if(st[k]==n)return 0;
    fr[st[k]]--;
    st[k]++;
    fr[st[k]]++;
    return 1;
}
bool valid()
{
    if(fr[st[k]]>=2)return 0;
    return 1;
}
void print()
{
    for(i=1;i<=n;i++)printf("%d ",st[i]);
    printf("\n");
}
void backt()
{
    k=0;
    init();
    while(k)
    {
        int es,ev=0;
        do
        {
            es=succesor();
            if(es)ev=valid();
        }while(es&&!ev);
        if(es)
        {
            if(k==n)print();
            else
                init();
        }
        else
        {
            fr[st[k]]--;
            --k;
        }
    }
}
int main()
{
    freopen("permutari.in","r",stdin);
    freopen("permutari.out","w",stdout);
    scanf("%d",&n);
    backt();
    return 0;
}