Cod sursa(job #254604)

Utilizator raduzerRadu Zernoveanu raduzer Data 7 februarie 2009 13:11:31
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 0.93 kb
#include <cstdio>

const int dx[4] = {0, 1, 0, -1};
const int dy[4] = {1, 0, -1, 0};
const int MAX_N = 55;

int n, m, k, z;
int a[MAX_N][MAX_N], b[MAX_N][MAX_N];
int sx[MAX_N * MAX_N], sy[MAX_N * MAX_N];

int main()
{
	int i, j, xs, ys, xf, yf;
	freopen("kdrum.in", "r", stdin);
	freopen("kdrum.out", "w", stdout);
	
	scanf("%d %d %d", &n, &m, &k);
	scanf("%d %d %d %d", &xs, &ys, &xf, &yf);
	
	for (i = 1; i <= n; ++i) 
		for (j = 1; j <= m; ++j) scanf("%d", &a[i][j]);
	
	sx[z = 1] = xs;
	sy[1] = ys;
	b[xs][ys] = 1;
	
	for (i = 1; i <= z; ++i)
	{
		for (int d = 0; d < 4; ++d)
		{
			int newx = sx[i] + dx[d];
			int newy = sy[i] + dy[d];
			
			if (newx > 0 && newx <= n && newy > 0 && newy <= m && 
				a[newx][newy] && (b[newx][newy] > b[sx[i]][sy[i]] + 1 || !b[newx][newy]))
			{
				sx[++z] = newx;
				sy[z] = newy;
				b[newx][newy] = b[sx[i]][sy[i]] + 1;
			}
		}
	}
	
	printf("%d\n", b[xf][yf]);
}