Cod sursa(job #126457)

Utilizator thebest001Neagu Rares Florian thebest001 Data 22 ianuarie 2008 11:35:33
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>

int n,k,m;
int g[100][2];
int w[1000];
int solnr=0;
void citire()
{
	int i;
	scanf("%d %d %d",&n,&k,&m);
	for (i=1;i<=m;i++)
		scanf("%d %d",&g[i][0],&g[i][1]);
}

int succ(int k)
{
	if (w[k]<n)
	{
		w[k]++;
		return 1;
	} else return 0;
}

int ver(int k)
{
	int i,j,l;
	for (i=1;i<=m;i++)
			for (l=1;l<=k;l++)
				if (((w[l-1]==g[i][0] || w[l+1]==g[i][0]) && w[l]==g[i][1])||
				((w[l-1]==g[i][1] || w[l+1]==g[i][1]) && w[l]==g[i][2]))
					return 0;
	for (i=1;i<k;i++) if (w[i]==w[k]) return 0;
	return 1;
}

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

void afis()
{
	solnr++;
	if (solnr==k) {
		for (int i=1;i<=n;i++) printf("%d ",w[i]);
	}
}

void faback()
{
	int scc,vld;
	int k=0;
	k++;
	init(k);
	while (k>0)
	{
		do
		{
			scc=vld=0;scc=succ(k);
			if (scc) vld=ver(k);
		} while ((scc && !vld) && scc);
		if (scc)
			{
				if (k==n) afis();
				else { k++;init(k);}
			} else k--;
	}
}

int main()
{
	freopen("dusman.in","r",stdin);
	freopen("dusman.out","w",stdout);
	citire();
	faback();
	return 0;
}