Cod sursă (job #293089)

Utilizator avatar micutu Andrei Vasile Cont Fraudulent micutu IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 1,87 kb
Rundă Arhiva de probleme Status evaluat
Dată 13 mar. 2017 10:51:39 Scor 30
#include <bits/stdc++.h>

using namespace std;

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

int n, m, nr, i, v[50], M[50][50], val, cnr;
int dl[] = {0, -1, 0, 1, 0};
int dc[] = {0, 0, 1, 0, -1};

struct elem
{
    int i, j;
};elem vr[100];

struct tin
{
    int ii, ij, si, sj;
};tin t[100];

void bkt(int nr)
{
    int i1, j1, c, i9, j9, k, i, val;
    if (nr == 1)
    {
        for (i = cnr; i > 1; i--)
        fout << t[i].ii << ' ' << t[i].ij << ' ' << t[i].si << ' ' << t[i].sj << '\n';
        exit(0);
    }
    for (i = 1; i <= cnr; i++)
    {
        if (v[i] == 0)
        {
            for (k = 1; k <= 4; k++)
            {
                i1 = vr[i].i + dl[k];
                j1 = vr[i].j + dc[k];
                i9 = i1 + dl[k];
                j9 = j1 + dc[k];
                if (M[i1][j1] != 0 && i9 > 0 && i9 <= n && j9 > 0 && j9 <= m && M[i9][j9] == 0)
                {
                    val = M[i1][j1];
                    v[val] = 1;
                    t[nr].ii = vr[i].i;
                    t[nr].ij = vr[i].j;
                    t[nr].si = i9;
                    t[nr].sj = j9;
                    c = M[i1][j1];
                    M[i1][j1] = 0;
                    M[vr[i].i][vr[i].j] = 0;
                    vr[i].i = i9;
                    vr[i].j = j9;
                    M[i9][j9] = i;
                    bkt(nr - 1);
                    M[i9][j9] = 0;
                    vr[i].i -= 2 * dl[k];
                    vr[i].j -= 2 * dc[k];
                    M[vr[i].i][vr[i].j] = i;
                    M[i1][j1] = c;
                    v[val] = 0;
                }
            }
        }
    }
}

int main()
{
    fin >> n >> m >> nr;
    cnr = nr;
    for (i = 1; i <= nr; i++)
    {
        fin >> vr[i].i >> vr[i].j;
        M[vr[i].i][vr[i].j] = i;
    }
    bkt(nr);
}