Pentru această operație este nevoie să te autentifici.
Cod sursă (job #295612)
Utilizator |
|
IP | ascuns |
---|---|---|---|
Problemă | Immortal (clasele 9-10) | Compilator | cpp | 1.99 kb |
Rundă | Arhiva de probleme | Status | evaluat |
Dată | 26 mar. 2017 06:54:13 | Scor | 30 |
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin("immortal.in");
ofstream fout("immortal.out");
int dir_i[] = {0, -1, 0, 1, 0};
int l,c, lupt, i, activ[50], x, m[50][50], valoare, c_nr;
int dir_j[] = {0, 0, 1, 0, -1};
struct lupta
{
int i, j;
}v[100];
struct tin
{
int i_i, i_j, s_i, s_j;
}; tin tine[100];
void bkt(int nr)
{
if(nr == 1)
{
for(i=c_nr; i > 1; i--)
fout << tine[i].i_i << ' ' << tine[i].i_j << ' ' << tine[i].s_i << ' ' << tine[i].s_j << '\n';
exit(0);
}
int i1, j1, copie, i2, j2, x, i, valoare;
for(i=1; i <= c_nr; i++)
{
if(activ[i] == 0)
{
for(x=1; x <= 4; x++)
{
i1 = v[i].i + dir_i[x];
j1 = v[i].j + dir_j[x];
i2 = i1 + dir_i[x];
j2 = j1 + dir_j[x];
if(m[i1][j1] != 0 && i2 > 0 && i2 <= l && j2 > 0 && j2 <= c&& m[i2][j2] == 0)
{
valoare = m[i1][j1];
activ[valoare] = 1;
tine[nr].i_i = v[i].i;
tine[nr].i_j = v[i].j;
tine[nr].s_i = i2;
tine[nr].s_j = j2;
copie = m[i1][j1];
m[i1][j1] = 0;
m[v[i].i][v[i].j] = 0;
v[i].i = i2;
v[i].j = j2;
m[i2][j2] = i;
bkt(nr-1);
m[i2][j2] = 0;
v[i].i -= 2*dir_i[x];
v[i].j -= 2*dir_j[x];
m[v[i].i][v[i].j] = i;
m[i1][j1] = copie;
activ[valoare] = 0;
}
}
}
}
}
int main()
{
fin >> l >> c >> lupt;
c_nr = lupt;
for(i=1; i <= lupt; i++)
{
fin >> v[i].i >> v[i].j;
m[v[i].i][v[i].j] = i;
}
bkt(lupt);
}