Cod sursa(job #446152)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 25 aprilie 2010 11:36:36
Problema Dusman Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>

char a[1001][1001];
int st[1001];
int n, m, K;
int i, j, k;
int AS, nr;

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

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

int e_valid (int k, int st[100])
{
	for (i=1; i<k; ++i)
		if (st[k] == st[i] || a[st[k]][st[k-1]] == 1)
			return 0;
	return 1;
}

int solutie (int k)
{
	if (k == n + 1)
		return 1;
	return 0;
}

void tipar ()
{
	for (i=1; i<=n; ++i)
		printf ("%d ", st[i]);
	printf ("\n");
}

void back (int k)
{
	if (solutie (k))
	{
		nr ++;
		if (nr == K)
		{
			tipar ();
			
		}
	}
	else
	{
		init (k, st);
		while (am_succesor (k, st))
			if (e_valid (k, st) && nr <= K)
				back (k + 1);
	}
}

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