Pagini recente »
Monitorul de evaluare
|
pro
|
Monitorul de evaluare
|
Monitorul de evaluare
|
Cod sursă (job #295618)
Cod sursă (job
#295618)
#include <fstream>
#define NMAX 23
#define IMMAX 32
using namespace std;
struct nemuritor{ int x, y, dead; };
struct mutare{ int a1, a2, a3, a4; };
int N, M, I, A[NMAX][NMAX], solutie, dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0}, doneMut;
nemuritor IM[IMMAX];
mutare MUT[IMMAX];
void ReadAll(void)
{
ifstream fin("immortal.in");
int i;
fin >>N >>M >>I;
doneMut = I - 1;
for (i = 1; i <= I; i++)
fin >>IM[i].x >>IM[i].y, A[IM[i].x][IM[i].y] = i;
fin.close();
}
void SolveBack(int Alive)
{
int i, j, bef;
if (Alive == 1)
solutie = 1;
else
{
for (i = 1; i <= I && !solutie; i++)
if (IM[i].dead == 0)
{
for (j = 0; j < 4 && !solutie; j++)
if (A[ IM[i].x + dx[j] ][ IM[i].y + dy[j] ] > 0 &&
A[ IM[i].x + 2 * dx[j] ][ IM[i].y + 2 * dy[j] ] <= 0 &&
IM[i].x + 2 * dx[j] <= N &&
IM[i].x + 2 * dx[j] > 0 &&
IM[i].y + 2 * dy[j] > 0 &&
IM[i].y + 2 * dy[j] <= M)
{
IM[ A[ IM[i].x + dx[j] ][ IM[i].y + dy[j] ] ].dead = 1;
A[ IM[i].x + dx[j] ][ IM[i].y + dy[j] ] = -A[ IM[i].x + dx[j] ][ IM[i].y + dy[j] ];
A[ IM[i].x ][ IM[i].y ] = 0;
bef = A[ IM[i].x + 2 * dx[j] ][ IM[i].y + 2 * dy[j] ];
A[ IM[i].x + 2 * dx[j] ][ IM[i].y + 2 * dy[j] ] = i;
IM[i].x += 2*dx[j];
IM[i].y += 2*dy[j];
SolveBack(Alive - 1);
IM[i].x -= 2 * dx[j];
IM[i].y -= 2 * dy[j];
A[ IM[i].x ][ IM[i].y ] = i;
A[ IM[i].x + 2 * dx[j] ][ IM[i].y + 2 * dy[j] ] = bef;
A[ IM[i].x + dx[j] ][ IM[i].y + dy[j] ] = -A[ IM[i].x + dx[j] ][ IM[i].y + dy[j] ];
IM[ A[ IM[i].x + dx[j] ][ IM[i].y + dy[j] ] ].dead = 0;
if (solutie)
{
MUT[doneMut].a1 = IM[i].x;
MUT[doneMut].a2 = IM[i].y;
MUT[doneMut].a3 = IM[i].x + 2 * dx[j];
MUT[doneMut].a4 = IM[i].y + 2 * dy[j];
doneMut --;
}
}
}
}
}
void WriteAll(void)
{
ofstream fout("immortal.out");
int i;
for (i = 1; i < I; i++)
fout <<MUT[i].a1 <<' '<<MUT[i].a2 <<' '<<MUT[i].a3 <<' '<<MUT[i].a4 <<'\n';
fout.close();
}
int main()
{
ReadAll();
SolveBack(I);
WriteAll();
return 0;
}