Cod sursa(job #2110158)

Utilizator Urdoi.BogdanUrdoi Bogdan Urdoi.Bogdan Data 20 ianuarie 2018 12:46:20
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;

ifstream f ("kdrum.in");
ofstream g ("kdrum.out");

int di[] = {0, 1, 0, -1};
int dj[] = {1, 0, -1, 0};

int parc[51][51], v[51][51];

void rez(int a[][51], int n, int m, int k,
         int x1, int y1, int x2, int y2, int& lRez,
         int lung, bool OK2, bool OK3)
{
    if ((x1 <= n && x1 >= 1)&&(y1 <= m && y1 >= 1)&& a[x1][y1] != 0 && lung <v[x1][y1])
    {
        v[x1][y1] = lung;
        if (a[x1][y1]%2 == 0)
            OK2 = 1;
        if (a[x1][y1]%3 == 0)
            OK3 = 1;
        if (x1 == x2 && y1 == y2)
         {
             if (OK2 && OK3)
                if (lung < lRez)
                    lRez = lung;
         }
        else{
            for (int i = 0; i < 4; i++)
                rez(a,n,m,k,x1+di[i], y1+dj[i],x2,y2,lRez,lung+1,OK2, OK3);
        }
    }
}

int main()
{
    int n, m, k;
    int x1, y1, x2, y2, rezultat = 51;
    f >> n >> m >> k;
    f >> x1 >> y1 >> x2 >> y2;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++){
            f >> parc[i][j];
            v[i][j] = 51;
        }
    rez(parc,n,m,k,x1,y1,x2,y2,rezultat,1,0,0);
    g << rezultat;
    return 0;
}