Cod sursa(job #197576)

Utilizator DraStiKDragos Oprica DraStiK Data 5 iulie 2008 10:53:24
Problema Gropi Scor 50
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.09 kb
#include <stdio.h>
struct coord {int x1,y1,x2,y2;};
int dx[4]={-1,0,1, 0};
int dy[4]={ 0,1,0,-1};
int a[4][255],b[4][255];
int n,c,m;
coord z[205];
void trans ()
{
    int i,j;
    for (i=1; i<=2; ++i)
        for (j=1; j<=c; ++j)
            b[i][j]=a[i][j];
}
void solve (int t)
{
	int i,j,k,step,flag=1;
	b[z[t].x1][z[t].y1]=1;
	for (step=1; flag; ++step)
	{
		flag=0;
		if (b[z[t].x2][z[t].y2])
			break;
		for (i=1; i<=2; ++i)
			for (j=1; j<=c; ++j)
				if (b[i][j]==step)
					for (k=0; k<4; ++k)
						if (b[i+dx[k]][j+dy[k]]!=-1 && (b[i+dx[k]][j+dy[k]]>step+1 || !b[i+dx[k]][j+dy[k]]))
						{
							b[i+dx[k]][j+dy[k]]=step+1;
							flag=1;

						}
	}
	printf ("%d\n",b[z[t].x2][z[t].y2]);
}
void read ()
{
	int i,x,y;
	scanf ("%d%d",&c,&n);
	for (i=1; i<=n; ++i)
	{
		scanf ("%d%d",&x,&y);
		a[x][y]=-1;
	}
	scanf ("%d",&m);
	for (i=1; i<=m; ++i)
	{
		scanf ("%d%d%d%d",&z[i].x1,&z[i].y1,&z[i].x2,&z[i].y2);
		trans ();
		solve (i);
	}
}
int main ()
{
	freopen ("gropi.in","r",stdin);
	freopen ("gropi.out","w",stdout);
	read ();
    return 0;
}