Cod sursa(job #865111)

Utilizator gabriel.badeaGabriel Badea gabriel.badea Data 26 ianuarie 2013 01:27:24
Problema Generare de permutari Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>

typedef int sir[100];
sir x;
int i, k, N;
int as, ev;
sir a;

void succ(sir x, int k, int &as)
{
	if(x[k] < N)
	{
		as = 1;
		x[k]++;
	}
	else
		as = 0;
}

void valid(sir x, int k, int &ev)
{
	int i;
	ev = 1;
	for(i=1;i<=k-1;i++)
		if(!(x[k]!=x[i]))
			ev = 0;
}

void afis(sir x, int k)
{
	int i;
	for(i=1;i<=k;i++)
		printf("%d ", a[x[i]]);
	printf("\n");
}

int main()
{
	freopen("permutari.in", "r", stdin);
	freopen("permutari.out", "w", stdout);
	scanf("%d", &N);
	for(i=1;i<=N;i++)
		a[i] = i;
	k = 1;
	x[k] = 0;
	while(k > 0)
	{
		do
		{
			succ(x, k, as);
			if(as) 
				valid(x, k, ev);
		}while(as && !ev);
		if(as)
			if(k == N)
				afis(x, k);
			else
			{
				k++;
				x[k] = 0;
			}
		else
			k--;
	}
}