Cod sursa(job #197652)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 5 iulie 2008 13:19:05
Problema Gropi Scor 50
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 0.95 kb
#include <stdio.h>
#include <string>

#define maxl 3
#define maxn 260
#define maxx 510
#define maxk 4

int n, m, l;
int a[maxl][maxn], c[maxl][maxn];
int sx[maxx];
int sy[maxx];
int dirx[maxk] = {0, 0, -1, 1};
int diry[maxk] = {-1, 1, 0, 0};

void BFS(int x, int y)
{
	int i, j, cx, cy;

	l = 1;
	sx[l] = x;
	sy[l] = y;
	c[x][y] = 1;

	for (i=1; i<=l; i++)
		for (j=0; j<maxk; j++)
		{
			cx = sx[i] + dirx[j];
			cy = sy[i] + diry[j];

			if (cx>0 && cy>0 && cx<3 && cy<=n && !a[cx][cy] && !c[cx][cy])
			{
				c[cx][cy] = c[sx[i]][sy[i]] + 1;
				sx[++l] = cx;
				sy[l] = cy;
			}
		}
}

int main()
{
	freopen("gropi.in", "r", stdin);
	freopen("gropi.out", "w", stdout);

	int T, i, x, y;

	scanf("%d %d ", &n, &m);

	for (i=1; i<=m; i++) 
	{
		scanf("%d %d ", &x, &y);
		a[x][y] = 1;
	}

	scanf("%d ", &T);

	while (T)
	{
		T--;

		memset(c, 0, sizeof(c));
		scanf("%d %d ", &x, &y);
		BFS(x, y);

		scanf("%d %d ", &x, &y);
		printf("%d\n", c[x][y]);
	}

	return 0;
}