Cod sursă (job #295614)

Utilizator avatar micutu Andrei Vasile Cont Fraudulent micutu IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 2.15 kb
Rundă Arhiva de probleme Status evaluat
Dată 26 mar. 2017 06:55:07 Scor 30
#include <fstream>
#include <cstdlib>
using namespace std;

ifstream fin("immortal.in");
ofstream fout("immortal.out");

int linii, coloane, gladiatori, i, activ[50], x, M[50][50], valoare, c_nr;
int dir_i[] = {0, -1, 0, 1, 0};
int dir_j[] = {0, 0, 1, 0, -1};

struct copac
{
    int i, j;
};copac v[100];

struct tin
{
    int i_i, i_j, s_i, s_j;
}; tin tine[100];

void back(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 iul, jul, copie, i_viit, j_viit, x, i, valoare;

    for(i=1; i <= c_nr; i++)
    {
        if(activ[i] == 0)
        {
            for(x=1; x <= 4; x++)
            {
                iul = v[i].i + dir_i[x];
                jul = v[i].j + dir_j[x];

                i_viit = iul + dir_i[x];
                j_viit = jul + dir_j[x];

                if(M[iul][jul] != 0 && i_viit > 0 && i_viit <= linii && j_viit > 0 && j_viit <= coloane && M[i_viit][j_viit] == 0)
                {
                    valoare = M[iul][jul];
                    activ[valoare] = 1;

                    tine[nr].i_i = v[i].i;
                    tine[nr].i_j = v[i].j;
                    tine[nr].s_i = i_viit;
                    tine[nr].s_j = j_viit;

                    copie = M[iul][jul];
                    M[iul][jul] = 0;
                    M[v[i].i][v[i].j] = 0;
                    v[i].i = i_viit;
                    v[i].j = j_viit;
                    M[i_viit][j_viit] = i;


                    back(nr-1);

                    M[i_viit][j_viit] = 0;
                    v[i].i -= 2*dir_i[x];
                    v[i].j -= 2*dir_j[x];
                    M[v[i].i][v[i].j] = i;
                    M[iul][jul] = copie;

                    activ[valoare] = 0;
                }
            }
        }
    }
}

int main()
{
    fin >> linii >> coloane >> gladiatori;
    c_nr = gladiatori;
    for(i=1; i <= gladiatori; i++)
    {
        fin >> v[i].i >> v[i].j;
        M[v[i].i][v[i].j] = i;
    }

    back(gladiatori);
}