Cod sursa(job #124716)

Utilizator FlorinC1996Florin C FlorinC1996 Data 19 ianuarie 2008 19:26:34
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>

int i,n,s[100],ka,m,ok=0,v1[10000],v2[10000],num=0;

int succesor(int k)
{
	if(s[k]<n)
	{
		++s[k];
		return 1;
	}
	return 0;
}

int valid(int k)
{
	for(i=1;i<=k-1;++i)
		if(s[k]==s[i])
		return 0;
	return 1;
}

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

void tipar()
{
++num;
if(num==ka)
{
	for(int i=1;i<=n;++i)
		printf("%d ",s[i]);
	printf("\n");
        ok=0;
}
}
int dusman(int k)
{
if(k==1)
	return 1;
for(i=1;i<=m;++i)
	if((s[k-1]==v1[i] && s[k]==v2[i])||(s[k-1]==v2[i] && s[k]==v1[i]))
	return 0;
return 1;
}
void backtracking(int k)
{
	if(ok==0)
	{
		s[k]=0;
		while(succesor(k) && dusman(k))
			if(valid(k))
				if(sol(k))
					tipar();
		else
		backtracking(k+1);
	}
}

int main()
{
freopen("dusman.in","r",stdin);
freopen("dusman.out","w",stdout);
	scanf("%d%d%d",&n,&ka,&m);
	for(i=1;i<=m;++i)
        scanf("%d%d",&v1[i],&v2[i]);
	backtracking(1);
	return 0;
}