Cod sursa(job #558142)

Utilizator iconiKMircea Chirea iconiK Data 17 martie 2011 09:22:05
Problema Dusman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bitset>
#include <fstream>
#include <vector>
using namespace std;

bitset<1001> viz(false);
vector<int> sol;

int a[1001][1001];
int N, K, M;

void back(int x);
bool cond(int x);

int main()
{
	ifstream in("dusman.in");
	in >> N >> K >> M;

	sol.resize(N + 1, 0);

	for (int i = 1; i <= M; i++)
	{
		int x, y;
		in >> x >> y;

		a[x][y] = a[y][x] = true;
	}

	back(1);
}

void back(int x)
{
	if (K == 0)
		return;

	if (x > N)
	{
		if (--K == 0)
		{
			ofstream out("dusman.out");

			for (int i = 1; i <= N; i++)
				out << sol[i] << ' ';
		}

		return;
	}

	for (int i = 1; i <= N; i++)
	{
		if (!viz[i])
		{
			sol[x] = i;
			viz[i] = true;

			if (cond(x))
				back(x + 1);

			viz[i] = false;
		}
	}
}

bool cond(int x)
{
	if (x > 1 && a[sol[x]][sol[x - 1]])
		 return false;
	else
		return true;
}