Cod sursa(job #596295)

Utilizator cgramadaGramada Cristian cgramada Data 16 iunie 2011 17:55:23
Problema Generare de permutari Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stdio.h>

#define MAX_N 10
int N;
FILE* in;
FILE* out;

void print(int perm[]) {
    int i;

    for (i = 0; i < N; i++) {
        fprintf(out, "%d ", perm[i]);
    }

    fprintf(out, "\n");
}

int valid(int k, int perm[]) {
    int i;

    for (i = 0; i < k; i++) {
        if (perm[i] == perm[k]) return 0;
    }

    return 1;
}

int main()
{
    int perm[MAX_N];
    int i, k = 0;
    int backtrack;

    in  = fopen("permutari.in", "rt");
    out = fopen("permutari.out", "wt");

    fscanf(in, "%d", &N);

    for (i = 0; i < N; i++) perm[i] = 0;

    while (k >= 0) {
        do {
            backtrack = (++perm[k] > N);
        } while (!valid(k, perm) && !backtrack);

        if (backtrack) --k;
        else {
            if (k == N-1) print(perm);
            else perm[++k] = 0;
        }
    }

    return 0;
}