Cod sursa(job #1010641)

Utilizator impulseBagu Alexandru impulse Data 15 octombrie 2013 13:07:55
Problema Generare de permutari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>

int isPerm(int* v, int *b, int n)
{
    for(int i = 0; i < n; i++)
        b[i] = 0;
    for(int i = 0; i < n; i++)
    {
        b[v[i]]++;
        if(b[v[i]] > 1)
            return 0;
    }
    return 1;
}

int inc(int* v, int n, int i)
{
    if(i == n) return 0;
    v[n-i-1]++;
    if(v[n-i-1] == n)
    {
        v[n-i-1] = 0;
        inc(v, n, i+1);
    }
}

int fact (int n)
{
    int b = 1;
    for(int i = 2; i <= n; i++)
        b*=i;
    return b;
}

int main()
{
    int n;
    FILE* fr = fopen("permutari.in", "r");
    FILE* fw = fopen("permutari.out", "w");
    fscanf(fr, "%d", &n);

    int *A = new int[n];
    int *B = new int[n];
    for(int i = 0; i < n; i++)
        A[i] = i;
    int facto = fact(n);
    int k = 0;
    while(facto > k)
    {
        if(isPerm(A, B, n))
        {
            k++;
            for(int i = 0; i < n; i++)
                fprintf(fw, "%d ", A[i] + 1);
            fprintf(fw, "\n");
        }
        inc(A, n, 0);
    }
    return 0;
}