Pagini recente » Cod sursa (job #729803) | Cod sursa (job #2653739) | Cod sursa (job #432302) | Cod sursa (job #2752803) | Cod sursa (job #1083881)
#include<utility>
#include <stdio.h>
#include<queue>
#define x first
#define y second
using namespace std;
FILE *in, *out;
int n,i,j,mat[176][176],m;
pair<int,int>obst;
pair<int,int>initial;
pair<int,int>destin;
queue<pair<int,int> >coada;
int main()
{
in = fopen("alee.in", "rt");
out = fopen("alee.out", "wt");
fscanf(in,"%d",&n);
fscanf(in,"%d",&m);
for(i=1;i<=m;i++)
{
fscanf(in,"%d",&obst.x);
fscanf(in,"%d",&obst.y);
mat[obst.x][obst.y]=-1;
}
fscanf(in,"%d",&initial.x);
fscanf(in,"%d",&initial.y);
mat[initial.x][initial.y]=1;
fscanf(in,"%d",&destin.x);
fscanf(in,"%d",&destin.y);
for(i=1;i<=n;i++)
mat[i][0]=mat[0][i]=mat[i][n+1]=mat[n+1][i]=-1;
coada.push(initial);
while(!coada.empty() && mat[destin.x][destin.y]==0)
{
pair<int,int>curent=coada.front();
coada.pop();
if(mat[curent.x+1][curent.y]==0)
{
mat[curent.x+1][curent.y]=mat[curent.x][curent.y]+1;
coada.push(make_pair(curent.x+1,curent.y));
}
if(mat[curent.x-1][curent.y]==0)
{
mat[curent.x-1][curent.y]=mat[curent.x][curent.y]+1;
coada.push(make_pair(curent.x-1,curent.y));
}
if(mat[curent.x][curent.y+1]==0)
{
mat[curent.x][curent.y+1]=mat[curent.x][curent.y]+1;
coada.push(make_pair(curent.x,curent.y+1));
}
if(mat[curent.x][curent.y-1]==0)
{
mat[curent.x][curent.y-1]=mat[curent.x][curent.y]+1;
coada.push(make_pair(curent.x,curent.y-1));
}
}
fprintf(out,"%d",mat[destin.x][destin.y]);
fclose(in);
fclose(out);
return 0;
}