Cod sursa(job #1097853)

Utilizator dropsdrop source drops Data 4 februarie 2014 00:28:14
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
/* Generare permutari folosind backtracking */
#include <cstdio>
bool Viz[10];
int X[10], N;

void Generate(int K)
{
    for (int i = X[K] + 1; i <= N; i++)
    if (Viz[i] == 0)
    {
        Viz[X[K]] = 0;
        Viz[i] = 1;
        X[K] = i;
        return;
    }
    Viz[X[K]] = 0;
    Generate(K - 1);
    for (int i = 1; i <= N; i++)
    if (Viz[i] == 0)
    {
        Viz[i] = 1;
        X[K] = i;
        return;
    }
}

int main()
{
    freopen("permutari.in","r",stdin);
    freopen("permutari.out","w",stdout);
    scanf("%d", &N);
    for (int i = 1; i <= N; i++)
    {
        X[i] = i;
        Viz[i] = 1;
    }
    do{
        for (int i = 1; i <= N; i++) printf("%d ", X[i]);
        printf("\n");
        Generate(N);
    } while (X[0] == 0);
}