Pagini recente » Electrica | Camere | Cod sursa (job #2757066) | Time Travel Gossip | Cod sursa (job #113350)
Cod sursa(job #113350)
Utilizator |
Mircea Pasoi domino |
Data |
9 decembrie 2007 18:23:58 |
Problema |
Dusman |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
1.11 kb |
#include <stdio.h>
#include <assert.h>
#define MAX_N 1024
#define FIN "dusman.in"
#define FOUT "dusman.out"
int N, M, K, stk[MAX_N], cnt, grad[MAX_N];
char G[MAX_N][MAX_N], U[MAX_N];
int bkt(int lv)
{
int i;
if (lv == N)
{
if (++cnt < K) return 0;
for (i = 0; i < N; ++i)
printf("%d ", stk[i]);
printf("\n");
return 1;
}
for (i = 1; i <= N; ++i)
{
if (U[i] || (lv > 0 && G[i][stk[lv-1]])) continue;
U[stk[lv] = i] = 1;
if (bkt(lv+1)) return 1;
U[i] = 0;
}
return 0;
}
int main(void)
{
int i, j;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d %d", &N, &K, &M);
assert(1 <= N && N <= 1000);
assert(1 <= K && K <= 10000);
for (; M; --M)
{
scanf("%d %d", &i, &j);
assert(1 <= i && i <= N);
assert(1 <= j && j <= N);
G[i][j] = G[j][i] = 1;
++grad[i]; ++grad[j];
}
for (i = 1; i <= N; ++i)
assert(0 <= grad[i] && grad[i] <= 3);
bkt(0);
return 0;
}