Cod sursa(job #267295)

Utilizator drag0s93Mandu Dragos drag0s93 Data 26 februarie 2009 23:49:05
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>

#define IN "dusman.in","r",stdin
#define OUT "dusman.out","w",stdout

struct dusman{
	int x,y;
};

int n,k,m;
dusman v[3020];
int m1[1020][3020];
int sol[1020];
char marc[1020];

void citire()
{
	int tt,nr;
	freopen(IN);
	scanf("%d%d%d",&n,&k,&m);
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d",&nr,&tt);
		m1[nr][tt]=1;
	}
}
int valid(int p,int nr)
{
	for(int i=1;i<=p;++i)
		if(sol[i]==nr)
			return 0;
	return 1;
}
void afisare()
{
	freopen(OUT);
	for(int i=1;i<=n;++i)
		printf("%d ",sol[i]);
	printf("\n");
}
void back(int p)
{
	if(k<0)
		return;
	if(p==n+1)
	{
		//for(int i=1;i<p;++i)
		//	printf("%d ",sol[i]);
		//printf("\n");
	//	for(int i=1;i<p;++i)
		//	for(int j=1;j<=m;++j)
			//	if((v[j].x==sol[i] && v[j].y==sol[i+1]) || (v[j].x==sol[i+1] && sol[i]==v[j].y))
			//		return;
		k--;
		if(k==0)
			afisare();
		return;
	}
	for(int i=1;i<=n;++i)
	{
		if(!marc[i] && !m1[sol[p-1]][i])
		{
			marc[i]=1;
			sol[p]=i;
			back(p+1);
			marc[i]=0;
		}
	}
}
int main()
{
	citire();
	back(1);
	return 0;
}