Cod sursa(job #446409)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 25 aprilie 2010 20:04:25
Problema Dusman Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>

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

int Am_Succesor ()
{
	if (st[k] < n)
	{
	 //   siraux[st[k]] = 0;
		st[k] ++;
		return 1;
	}
	return 0;
}

int E_Valid ()
{

	if (siraux[st[k]] == 1 || a[st[k]][st[k-1]] == 1)
	{
	    return 0;
	}

	return 1;
}

int main ()
{
	FILE *f = fopen ("dusman.in","r");
	FILE *g = fopen ("dusman.out","w");
	fscanf (f,"%d %d %d", &n, &K, &m);
	for (k=1; k<=m; ++k)
	{
		fscanf (f,"%d %d", &i, &j);
		a[i][j] = a[j][i] = 1;
	}
	fclose(f);

	k = 1;
	st[k] = 0;
	while (k > 0 && nr <= K)
	{
	    int m = st[k];
		do
		{ }
		while ( (AS = Am_Succesor ()) && !E_Valid());

		if (AS)
		{
		    siraux[m] = 0;
		    siraux[st[k]] = 1;
			if (k == n)
			{
				nr ++;
				if (nr == K)
				{
					for (i=1; i<=k; ++i)
						fprintf (g,"%d ", st[i]);
					fprintf (g,"\n");
					break;
				}
			}
			else
			{
				k ++;
				st[k] = 0;
			}
		}
		else
            {
            siraux[m] = 0;
            //siraux[st[k]] = 0;
            st[k] = 0;
			k --;
            }
	}


	return 0;
}