Cod sursa(job #870307)

Utilizator CrescentselectJicol Crescent Crescentselect Data 3 februarie 2013 10:22:37
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("permutari.in");
ofstream g("permutari.out");

int n,v[10];

void citire()
{
    f>>n;
}

int first(int k)
{
    for(int val=1;val<=n;val++) {
        bool gasit = false;
        for(int i=1;i<=k;i++)
        {
            if(v[i]==val) {
                gasit=true;
                break;
            }
        }
        if(!gasit) {
            return val;
        }
    }
}

void afisare()
{
    for( int i=1;i<=n;i++)
    {
        g<<v[i]<<" ";
    }
    g<<'\n';
}

bool validare(int k) {
    for(int i=1;i<=k;i++)
    {
        for( int j=1;j<=k;j++)
        {
            if(v[i]==v[j] && i!=j)
            {
                return false;
            }
        }
    }
    return true;
}

int next(int k) {
    for(int val=v[k]+1;val<=n;val++) {
        bool gasit = false;
        for(int i=1;i<=k;i++)
        {
            if(v[i]==val) {
                gasit=true;
                break;
            }
        }
        if(!gasit) {
            return val;
        }
    }
    return 0;
}

void proces(int k)
{
    v[k] = first(k);

    do {
        if(validare(k))
        {
            if(k == n)
            {
                afisare();
            }
            else{
                proces(k+1);
            }
        }

    } while(v[k] = next(k));

    v[k] = 0;
    k--;
}
int main()
{
    citire();
    proces(1);
    return 0;
}