Cod sursa(job #366343)

Utilizator alexandru92alexandru alexandru92 Data 21 noiembrie 2009 16:15:54
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
/* 
 * File:   main.cpp
 * Author: virtualdemon
 *
 * Created on November 21, 2009, 3:46 PM
 */
#include <stdio.h>
#include <cstdlib>

/*
 * 
 */
int main(int argc, char** argv)
{int n, i, k;
 bool ok;
 int *s; 
 bool *uz;
    freopen( "permutari.in", "rt", stdin );
    freopen( "permutari.out", "wt", stdout );
    scanf("%d", &n );
    s=(int*)calloc( n, sizeof(int) );
    uz=(bool*)calloc( n, sizeof(bool) );
    k=0;
    do
    {ok=false;
        for( i=s[k]+1; i <= n; ++i )
            if( false == uz[i-1] )
            {
                ok=uz[i-1]=true;
                if( s[k] )
                   uz[s[k]-1]=false;
                s[k]=i;
                break;
            }
        if( false == ok )
        {
            uz[s[k]-1]=0;
            s[k]=0;
            --k;
            continue;
        }
        if( k == n-1 )
        {
            for( i=0; i <= k; ++i )
                printf("%d ", s[i] );
            printf("\n");
        }
        else ++k;
    }while( k >= 0 );
    free(uz); free(s);
    return 0;
}