Cod sursa(job #1199385)

Utilizator hrazvanHarsan Razvan hrazvan Data 19 iunie 2014 11:03:54
Problema Generare de permutari Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#define MAXN 8
FILE *out;
int n, prim, prev[ MAXN ], next[ MAXN ], stiva[ MAXN ], dr = 0;

void bkt( int nr ){
    int i;
    if ( nr == 0 ){
        for( i = 0; i < dr; i++ )   fprintf ( out, "%d ", stiva[ i ] );
        fprintf ( out, "\n" );
    }
    else{
        int aux = prim;
        for ( i = prim; i < n; i = next[ i ] ){
            if ( i == prim )    prim = next[ i ];
            stiva[ dr ] = i + 1;
            dr++;
            prev[ next[ i ] ] = prev[ i ];
            if ( prev[ i ] != -1 )      next[ prev[ i ] ] = next[ i ];
            bkt ( nr - 1 );
            prim = aux;
            dr--;
            prev[ next[ i ] ] = i;
            if ( prev[ i ] != -1 )      next[ prev[ i ] ] = i;
        }
    }
    return 0;
}

int main()
{
    FILE *in = fopen ( "permutari.in", "r" );
    fscanf ( in, "%d", &n );
    fclose( in );
    out = fopen ( "permutari.out", "w" );
    int i;
    for ( i = 0; i < n; i++ ){
        prev[ i ] = i - 1;
        next[ i ] = i + 1;
    }
    prim = 0;
    bkt ( n );
    fclose ( out );
    return 0;
}