Cod sursa(job #1095938)

Utilizator victormarinMarin Victor victormarin Data 1 februarie 2014 11:41:26
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<cstdio>
#define filein "permutari.in"
#define fileout "permutari.out"
using namespace std;

int st[10];
bool used[8];
int n;
FILE *out;
void citire();
void bkt();
void init(int k);
bool succesor(int k);
bool valid(int k);
void tipar();

int main()
{
    citire();
    out=fopen(fileout,"w");
    bkt();
    fclose(out);
    return 0;
}

void citire()
{
    FILE *in;
    in=fopen(filein,"r");
    fscanf(in,"%d",&n);
    fclose(in);
}

void bkt()
{
    int k=1;
    init(k);
    while (k>0)
    {
        if (succesor(k))
        {
            if (valid(k))
            {
                if (k==n)
                    tipar();
                else
                    init(++k);
            }
        }
        else k--;
    }
}

void init(int k)
{
    st[k]=0;
}

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

bool valid(int k)
{
    int i;
    for (i=1; i<=n; i++)
        used[i]=0;
    for (i=1; i<=k; i++)
    {
        if (used[st[i]]==1)
            return false;
        used[st[i]]=1;
    }
    return true;
}

void tipar()
{
    int i;
    for (i=1; i<=n; i++)
        fprintf(out,"%d ",st[i]);
    fprintf(out,"\n");
}