Cod sursa(job #115338)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 16 decembrie 2007 12:13:48
Problema Dusman Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasele 5-8 Marime 1.19 kb
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#include <algorithm>

using namespace std;

long i, m, n, k, v1[1000000], v2[1000000], vct[1010], z, j, sol, ok;

long ver() {
	long ipr = 0, jpr = 0;
	for (ipr = 1; ipr <= m; ++ipr) {
		for (jpr = 1; jpr <= n; ++jpr) {
			if (vct[jpr] == v1[ipr] && vct[jpr + 1] == v2[ipr]) {
				return 1;
			}
			if (vct[jpr] == v2[ipr] && vct[jpr + 1] == v1[ipr]) {
				return 1;
			}
		}
	}
	return 0;
}

void back(long lev) {
	if (lev == n) {
		if (ver() == 0) {
			++sol;
			if (sol == k) {
				for (i = 1; i <= n; ++i) {
					printf("%ld ", vct[i]);
				}		
				printf("\n");
				exit(0);
			}
		}
/*		for (j = 1; j <= n; ++j) {
			printf("%ld ", vct[j]);
		}
		printf("\n");*/
		return;
	}
	for (long i = lev; i <= n; ++i) {
		z = vct[lev];
		vct[lev] = vct[i];
		vct[i] = z;
		back(lev + 1);
		z = vct[lev];
		vct[lev] = vct[i];
		vct[i] = z;
	}
}

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