Cod sursa(job #124712)

Utilizator FlorinC1996Florin C FlorinC1996 Data 19 ianuarie 2008 19:17:15
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 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)
{
	s[k]=0;
	while(succesor(k) && dusman(k))
		if(valid(k))
			if(sol(k))
				tipar();
	else
        if(ok==0)
	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;
}