Cod sursa(job #116508)

Utilizator mithyPopovici Adrian mithy Data 18 decembrie 2007 19:34:43
Problema Dusman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#define NMax 1005

int n, m, k;
int a[NMax][NMax];
int uz[NMax];
int sol[NMax];
int count, ok = 1;

void citire();
void bkt( int x );
void afis();

int main()
{
	int i;
	citire();

	for (i=1; i<=n; i++)
	{
		uz[i] = 1; sol[0] = i;
		bkt( 1 );
		uz[i] = 0;
	}

	return 0;
}
void afis()
{
	int i;
	FILE *g = fopen( "dusman.out", "wt" );
	for (i=0; i<n; i++)
		fprintf( g, "%d ", sol[i] );
}
void bkt( int x )
{
	int i;
	if ( !ok ) return;
	if ( x >= n )
	{
		count++;
		if ( count >= k )
		{
			afis();
			ok=0;
			return;
		}
	}

	for (i=1; i<=n; i++)
		if ( !uz[i] && !a[i][sol[x-1]] )
		{
			uz[i] = 1; sol[x] = i;
			bkt( x+1 );
			uz[i] = 0;
		}
}


void citire()
{
	int i, x, y;
	FILE *f = fopen( "dusman.in", "rt" );
	fscanf( f, "%d %d %d", &n, &k, &m );
	for (i=0; i<m; i++)
	{
		fscanf( f, "%d %d", &x, &y );
		a[x][y] = a[y][x] = 1;
	}
}