Cod sursa(job #3219580)

Utilizator GabyXBBabiuc Eduard Gabriel GabyXB Data 31 martie 2024 17:58:19
Problema Kdrum Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
using namespace std;

ifstream cin("kdrum.in");
ofstream cout("kdrum.out");

int n , m , k , matrix[54][54];
int deplasare[54][54];

const int8_t dx[]={1,0,-1,0};
const int8_t dy[]={0,1,0,-1};

struct coada
{
    int x;
    int y;
}q[2505] ,inceput , sfarsit;

void citire()
{
    cin >>  n >> m >> k;
    cin >> inceput.x >> inceput.y;
    cin >> sfarsit.x >> sfarsit.y;
    for(int i = 1  ; i <= n ; i++)
        for(int j = 1 ; j <= m ; j++)
            cin >> matrix[i][j];


}

void bordare()
{
    for(int i = 0 ; i <= n + 1 ; i++)
        deplasare[i][m+1]=deplasare[i][0]=-1;
    for(int j = 0 ; j <= m + 1 ; j++)
        deplasare[0][j]=deplasare[n+1][j]=-1;
}

void rezolvare()
{
    deplasare[inceput.x][inceput.y]=1;
    int x,y;
    int st,dr;
    st=dr=1;

    q[st] = inceput;

    while(st<=dr && deplasare[sfarsit.x][sfarsit.y]==0)
    {
        x = q[st].x;
        y = q[st].y;

        for(int i = 0 ; i<4 ; i++)
            {
                if(matrix[x +dx[i]][y + dy[i]]!=0 && deplasare[x +dx[i]][y + dy[i]]==0)
                {
                    deplasare[x +dx[i]][y + dy[i]] = deplasare[x][y]+1;
                        q[++dr].x = x + dx[i];
                        q[dr].y = y + dy[i];
                }
            }
        st++;
    }
    cout << deplasare[sfarsit.x][sfarsit.y];
}

int main()
{
    citire();
    bordare();
    rezolvare();
}