Cod sursa(job #1320810)

Utilizator HoreaOrosHorea Oros HoreaOros Data 18 ianuarie 2015 15:49:44
Problema Generare de permutari Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.4 kb
#include <stdio.h>
#include <stdlib.h>
#define MAX 8
void init(int v[], int k)
{
    v[k] = -1;
}

int succesor(int v[], int k, int n)
{
    int as = 0;
    if(v[k] < n - 1)
    {
        v[k]++;
        as = 1;
    }
    return as;
}

int valid(int v[], int k, int n)
{
    int i;

    for(i = 0; i < k; i++)
        if(v[i] == v[k])
            return 0;

    return 1;
}
int solutie(int k, int n)
{
    if(k == n - 1)
        return 1;
    else
        return 0;
}

void tipar(FILE *g, int v[], int n)
{
    int i;
    for(i = 0; i < n; i++)
        fprintf(g, "%d ", v[i] + 1);
    fprintf(g, "\n");
}

void permutari(int n)
{
    int v[MAX] = {0};
    int k = 0, as, ev;
    FILE *g;


    g = fopen("permutari.out", "w");



    init(v, k);
    while(k >= 0)
    {
        do
        {
            as = succesor(v, k, n);
            if(as)
                ev = valid(v, k, n);
        }while(as && !ev);
        if(as)
        {
            if(solutie(k, n))
            {
                tipar(g, v, n);
            }
            else
            {
                k++;
                init(v, k);
            }
        }
        else
            k--;
    }

    fclose(g);
}



int main()
{
    FILE *f;
    int n;

    f = fopen("permutari.in", "r");
    fscanf(f, "%d", &n);

    permutari(n);

    fclose(f);

    return 0;
}