Pagini recente »
Diferențe pentru runda/adunare între reviziile 14 și 46
|
Istoria paginii utilizator/ecaterina
|
Rating C Popescu Luca-Theodor (LucaSlazer)
|
Statistici Gagea Costin (CostinGagea)
|
Cod sursă (job #126934)
Cod sursă (job
#126934)
#include <fstream>
#define x first
#define y second
using namespace std;
ifstream fin ("immortal.in");
ofstream fout ("immortal.out");
struct sol { int px, py, sx, sy; } S[410];
const int dl[] = { -1, 0, 1, 0 };
const int dc[] = { 0, 1, 0, -1 };
int N, M, I;
pair < int, int > A[410];
bool w = 1, fr[410], V[22][22];
bool Verif(int i, int j)
{
if (i < 1 || i > N || j < 1 || j > M) return 0;
return 1;
}
int Cauta(int i, int j)
{
for (int p = 1; p <= I; p++)
{
if (!fr[p] && A[p].x == i && A[p].y == j) return p;
}
return 0;
}
void Back(int k)
{
if (k == 1)
{
for (int i = I; i >= 2; i--)
{
fout << S[i].px << ' ' << S[i].py << ' ' << S[i].sx << ' ' << S[i].sy << '\n';
}
fout.close();
w = 0;
return;
}
else
{
for (int i = 1; i <= I; i++)
{
if (!fr[i] && w)
{
int auxi = A[i].x;
int auxj = A[i].y;
for (int p = 0; p < 4; p++)
{
int ii = auxi + dl[p];
int jj = auxj + dc[p];
int i_i = ii + dl[p];
int j_j = jj + dc[p];
if (Verif(ii, jj) && Verif(i_i, j_j) && V[ii][jj] && !V[i_i][j_j])
{
int j = Cauta(ii, jj);
S[k].px = auxi;
S[k].py = auxj;
S[k].sx = i_i;
S[k].sy = j_j;
V[auxi][auxj] = 0;
V[ii][jj] = 0;
V[i_i][j_j] = 1;
A[i].x = i_i;
A[i].y = j_j;
fr[j] = 1;
Back(k - 1);
V[auxi][auxj] = 1;
V[ii][jj] = 1;
V[i_i][j_j] = 0;
A[i].x = auxi;
A[i].y = auxj;
fr[j] = 0;
}
}
}
}
}
}
int main()
{
fin >> N >> M >> I;
for (int i = 1; i <= I; i++)
{
fin >> A[i].x >> A[i].y;
V[A[i].x][A[i].y] = 1;
}
Back(I);
return 0;
}