Cod sursa(job #254519)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 7 februarie 2009 12:38:53
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 0.92 kb
#include <stdio.h>
const int NMAX=60;
const int deplx[]={0, 1, 0, -1};
const int deply[]={1, 0, -1, 0};

int drum[NMAX][NMAX], qx[NMAX], qy[NMAX];
long a[NMAX][NMAX];

void bf(int x1, int y1, int x2, int y2);

int main()
{
	int n, m, i, j, x1, x2, y1, y2, k;
	freopen("kdrum.in", "r", stdin);
	freopen("kdrum.out", "w", stdout);
	scanf("%d%d%d", &n, &m, &k);
	scanf("%d%d%d%d", &x1, &y1, &x2, &y2);	
	for (i=1; i<=n; i++)
		for (j=1; j<=m; j++)
			scanf("%ld", &a[i][j]);
	bf(x1, y1, x2, y2);
	printf("%d", drum[x2][y2]);
	return 0;
}//main

void bf(int x1, int y1, int x2, int y2)
{
	int u=0, p=0, tx, ty, x, y, i;
	qx[u]=x1;
	qy[u]=y1;
	drum[x1][y1]=1;
	while (p<=u)
	{
		tx=qx[p];
		ty=qy[p];
		p++;
		for (i=0; i<4; i++)
		{
			x=tx+deplx[i];
			y=ty+deply[i];
			if ((!drum[x][y])&&(a[x][y]))
			{
				u++;
				qx[u]=x;
				qy[u]=y;
				drum[x][y]=drum[tx][ty]+1;
				if ((x==x2)&&(y==y2))
					return;
			}//if
		}//for i
	}//while
}//bf