Cod sursa(job #1083885)

Utilizator adrianvVasiu Adrian-Daniel adrianv Data 16 ianuarie 2014 15:23:35
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#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;
}