Cod sursa(job #1518377)

Utilizator gavrisraulRaul Gavris gavrisraul Data 5 noiembrie 2015 21:09:09
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("alee.in");
ofstream fout("alee.out");

int di[4]={0,0,1,-1};
int dj[4]={1,-1,0,0};
int Map[180][180],N,M,startx,starty,stopx,stopy;
queue< pair< int , int > >coada;
void Citire()
{
       fin>>N>>M;
       for(int i=1;i<=M;i++)
       {
              int x,y;
              fin>>x>>y;
              Map[x][y]=-1;
       }
       fin>>startx>>starty>>stopx>>stopy;
}
bool OK(int i,int j)
{
       if(i<1 || j<1 || i>N || j>N)
              return false;
       if(Map[i][j]==-1)
              return false;
       return true;
}
void Lee()
{
       int i,j,i1,j1;
       Map[startx][starty]=1;
       coada.push(make_pair(startx,starty));
       while(!coada.empty())
       {
              i=coada.front().first;
              j=coada.front().second;
              coada.pop();
              for(int dir=0;dir<4;dir++)
              {
                     i1=i+di[dir];
                     j1=j+dj[dir];
                     if(OK(i1,j1) && Map[i1][j1]<1)
                     {
                            Map[i1][j1]=Map[i][j]+1;
                            coada.push(make_pair(i1,j1));
                     }
              }
       }
}
int main()
{
       Citire();
       Lee();
       fout<<Map[stopx][stopy];
       return 0;
}