Pentru această operație este nevoie să te autentifici.

Cod sursă (job #295612)

Utilizator avatar micutu Andrei Vasile Cont Fraudulent micutu 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);
}