Cod sursa(job #411125)

Utilizator Cristi09Cristi Cristi09 Data 4 martie 2010 18:53:10
Problema Dusman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
int x[1001],n,k,d,as,ev=1,var,ind,car[1001],mat[1001][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;
	int st=x[ind];
	if(x[ind]<n)
	do
	{
		++x[ind];
		if(!car[x[ind]]&&!mat[x[ind-1]][x[ind]])
		{as=1;car[x[ind]]=1;car[st]=0;}
	}while(x[ind]<n&&!as);
	if(!as)x[ind]=st;
}
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]);
	//printf("\n");
	ind=-1;
}
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();}
			else {++ind;x[ind]=0;}
		}
		else{car[x[ind]]=0;x[ind]=0;--ind;}
	}
	fclose(g);
	return 0;
}