Cod sursa(job #411436)

Utilizator laurenttlaurentiu pavel laurentt Data 4 martie 2010 21:41:09
Problema Generare de permutari Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>
int n, st[40321],k;

void cit()
{
	scanf("%d",&n);
}

void init(int k)
{
	st[k]=0;
}

void succesor(int k, int &es)
{
	if(st[k]<n)
	{
		st[k]++;
		es=1;
	}
	else
		es=0;
}

int sol(int k)
{
	return k==n;
}


int  valid(int k, int &ev)
{
	int i;
	ev=1;
	for(i=1; i<k; i++)
		if(st[k]==st[i])
			ev=0;
	return ev;
}


void afisare()
{
	int i;
	for(i=1; i<=k; i++)
		printf("%d",st[i]);
	printf("\n");
}
/*

void back()
{
	int es,ev;
	
	k=1;
	init(1);
	
	while(k>0)
	{
		do
		{
			succesor(k,es);
			if(es)
				valid(k,ev);
		}while(!ev || !es);
		if(es)
			if(sol(k))
				afisare();
			else
			{
				k++;
				init(k);
			}
		else
			k--;
	}
}
*/
void back()
{
	int es,ev;
	init(1);
	k=1;
	while(k>0)
	{
		int ev=0,es=0;
		while(ev==0)
		{
			succesor(k,es);
			if(es)
			valid(k,ev);
			else ev=1;
		}
			
	if(es)
		if(sol(k))
			afisare();
		else
		{
			k++;
			init(k);
		}
		else
			k--;
	}
		
}

int main()
{
	freopen("permutari.in","r",stdin);
	freopen("permutari.out","w",stdout);
	
	cit();
	back();
	if(n==0)
		printf("0");
	
	return 0;
}