Pagini recente »
Borderou de evaluare (job #295684)
|
Borderou de evaluare (job #82912)
|
Cod sursă (job #513428)
|
Clasament lasm_03_04_2019_10_12
|
Cod sursă (job #668960)
Cod sursă (job
#668960)
#include <fstream>
using namespace std;
ifstream cin("immortal.in");
ofstream cout("immortal.out");
const int NMAX = 500;
struct MOVE
{
int i1, j1, i2, j2;
};
MOVE sol[NMAX + 5];
struct ENTITY
{
int pI, pJ;
}pos[NMAX + 5];
int n, m, cnt;
int soldiers;
pair<int, int> dk[4] = { make_pair(-1, 0), make_pair(0, 1), make_pair(1, 0), make_pair(0, -1)};
bool v[NMAX + 5][NMAX + 5];
bool OK(int i, int j)
{
return (i >= 1 && i <= n && j >= 1 && j <= m && v[i][j] == 0);
}
bool solved;
void bkt(int k)
{
if (cnt == 1 && !solved)
{
for (int i = 1; i < soldiers; i++)
{
cout << sol[i].i1 << ' ' << sol[i].j1 << ' ' << sol[i].i2 << ' ' << sol[i].j2 << '\n';
}
solved = 1;
}
else if (!solved)
{
for (int i = 1; i <= soldiers; i++)
{
int I = pos[i].pI;
int J = pos[i].pJ;
if (v[I][J] == 1)
{
for (int t = 0; t < 4; t++)
{
int newI = I + dk[t].first;
int newJ = J + dk[t].second;
sol[k] = { I, J, newI + dk[t].first, newJ + dk[t].second };
if(v[newI][newJ] == 1 && OK(newI + dk[t].first, newJ + dk[t].second)){
v[newI][newJ] = 0;
v[I][J] = 0;
v[newI + dk[t].first][newJ + dk[t].second] = 1;
pos[i] = { newI + dk[t].first, newJ + dk[t].second };
cnt--;
if(cnt >= 1)
bkt(k + 1);
cnt++;
pos[i]= { I, J };
v[newI][newJ] = 1;
v[I][J] = 1;
v[newI + dk[t].first][newJ + dk[t].second] = 0;
}
}
}
}
}
}
int main()
{
cin >> n >> m >> cnt;
soldiers = cnt;
for (int i = 1; i <= cnt; i++)
{
cin >> pos[i].pI >> pos[i].pJ;
v[pos[i].pI][pos[i].pJ] = 1;
}
bkt(1);
return 0;
}