Pagini recente »
Cod sursă (job #418285)
|
Monitorul de evaluare
|
Istoria paginii runda/nu_ai_curaj2/clasament
|
11_ian_2014
|
Cod sursă (job #111819)
Cod sursă (job
#111819)
#include <cstdio>
#define N 20
#define I 15
struct pozSt {int linI, colI, linF, colF;} stiva[I +1];
struct poz {int lin, col;} vims[I +1];
int a[N +2][N +2], flag = 0;
int n, m, imm;
int dl[] = {0, 0, 1, 0, -1}, dc[] = {0, 1, 0, -1, 0};
void bordare () {
for (int i = 0; i <= n +1; i++) {
a[i][0] = a[i][m +1] = -1;
}
for (int j = 0; j <= m +1; j++) {
a[0][j] = a[n +1][j] = -1;
}
}
int vecin (int x, int y) {
for (int i = 1; i <= 4; i++) {
if (a[x + dl[i]][y + dc[i]] == 1) {
return i;
}
}
return 0;
}
void afisare () {
for (int i = 1; i < imm; i++) {
printf ("%d %d %d %d\n", stiva[i].linI, stiva[i].colI, stiva[i].linF, stiva[i].colF);
}
}
void backtrack (int k) {
if (flag == 1) {
return;
}
if (k == imm -1) {
afisare ();
flag = 1;
}
else {
int i, j;
for (int p = 1; p <= imm; p++) {
if (vims[p].lin != 0) {
i = vims[p].lin;
j = vims[p].col;
int v;
v = vecin (i, j);
if (a[i][j] == 1 && v != 0 && a[i + 2* dl[v]][j + 2* dc[v]] == 0) {
k++;
stiva[k].linI = i;
stiva[k].colI = j;
stiva[k].linF = i + 2* dl[v];
stiva[k].colF = j + 2* dc[v];
a[i + dl[v]][j + dc[v]] = 0;
a[i + 2* dl[v]][j + 2* dc[v]] = 1;
a[i][j] = 0;
vims[p].lin = i + 2* dl[v];
vims[p].col = j + 2* dc[v];
backtrack (k);
a[i + dl[v]][j + dc[v]] = 1;
a[i + 2* dl[v]][j + 2* dc[v]] = 0;
a[i][j] = 1;
vims[p].lin = i;
vims[p].col = j;
k--;
}
}
}
}
}
int main () {
freopen ("immortal.in", "r", stdin);
freopen ("immortal.out", "w", stdout);
scanf ("%d%d%d", &n, &m, &imm);
for (int i = 1; i <= imm; i++) {
scanf ("%d%d", &vims[i].lin, &vims[i].col);
a[vims[i].lin][vims[i].col] = 1;
}
bordare ();
backtrack (0);
return 0;
}