Cod sursa(job #1881761)

Utilizator Andrei01Dalinesc Andrei Aurelian Andrei01 Data 16 februarie 2017 18:38:20
Problema Suma divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("alee.in");
ofstream g("alee.out");
int di[4]={0,0,1,-1};
int dj[4]={1,-1,0,0};
int Map[175][175],n,m,startx,starty,stopx,stopy;
queue < pair < int,int > >coada;
void citire()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        f>>x>>y;
        Map[x][y]=-1;
    }
    f>>startx>>starty>>stopx>>stopy;
}
bool ok(int i, int j)
{
    if(i<1||i<1||j>n||i>n)
        return false;
    if(Map[i][j]==-1)
        return false;
    return true;
}
void lee()
{
    int i,j,i_urm,j_urm;
    Map[startx][stopx]=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++)
        {
            i_urm=i+di[dir];
            j_urm=j+dj[dir];
            if(ok(i_urm,j_urm)&&Map[i_urm][j_urm]<1)
            {
                Map[i_urm][j_urm]=Map[i][j]+1;
                coada.push(make_pair(i_urm,j_urm));
            }
        }
    }
}
int main()
{
   citire();
   lee();
   g<<Map[stopx][stopy];
    return 0;
}