Cod sursa(job #616983)

Utilizator soriynSorin Rita soriyn Data 13 octombrie 2011 19:16:51
Problema Dusman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<stdlib.h>


bool uz[1005][1005];

int p,n,st[1005],cnt,val,m,k,as,ev;
bool u[1005];


void tipar()
{
	if(cnt<val) 
		{
			cnt++;
	}
	
	else if(cnt==val)
	{
		for(int i=1;i<=n;i++)
			printf("%d ",st[i]);
		exit(0);
	}
}

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

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

int valid()
{
	if(uz[st[k]][st[k-1]]==1 || u[st[k]]==1) return 0;
	else 
		{u[st[k]]=1;
	     return 1;
		}
}

void back()
{
	k=1;
	cnt=1;
	init();
	while(k>0)
	{
		as=1,ev=0;
		while(as!=0 &&ev==0)
		{
			as=succesor();
			if(as)
				ev=valid();
			    
		}
		if(as)
			if(k==n)
			      u[st[k]]=0,tipar();
			else{k++,init();}
			else u[st[--k]]=0;
	}
}

int main()
{
	freopen("dusman.in","r",stdin);
	freopen("dusman.out","w",stdout);
	int a,b;
	scanf("%d %d %d",&n,&val,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d",&a,&b);
		uz[a][b]=1;
		uz[b][a]=1;
	}
	back();
}