Cod sursa(job #411026)

Utilizator Cristi09Cristi Cristi09 Data 4 martie 2010 18:12:47
Problema Dusman Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
int mat[1000][1000],x[1001],n,k,d,as,ev=1,var,ind,car[1001];
FILE*g=fopen("dusman.out","w");
void read()
{
	FILE*f=fopen("dusman.in","r");
	fscanf(f,"%d%d%d",&n,&k,&d);
	int x,y;
	for(;d;--d)
	{
		fscanf(f,"%d%d",&x,&y);
		mat[x][y]=mat[y][x]=1;
	}
	fclose(f);
}	
void succesor()
{
	as=0;
	if(x[ind]<n)
	do
	{
		++x[ind];
		if(!mat[x[ind-1]][x[ind]])
		as=1;
	}while(x[ind]<n&&!as);
}
void eval()
{
	int i,j;
	ev=1;
	for(i=0;i<ind;++i)
	for(j=i+1;j<=ind;++j)
		if(x[i]==x[j]){ev=0;return;}
}
void tipar()
{
	int i;
	for(i=0;i<n;++i)
		fprintf(g,"%d ",x[i]);
	fprintf(g,"\n");
}
int solutie()
{
	if(ind==n-1)
	{++var;return 1;}
	return 0;
}
int main()
{
	read();
	while(ind>=0)
	{
		do
		{
			succesor();
			if(as)eval();
		}while(!(!as||as&&ev));
		if(as)
		{
			if(solutie())
				if(var==k){tipar();ind=-1;}
				else{car[x[ind]]=0;x[ind]=0;--ind;}
			else {++ind;x[ind]=0;}
		}
		else{car[x[ind]]=0;x[ind]=0;--ind;}
	}
	fclose(g);
	return 0;
}