Cod sursa(job #254390)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 7 februarie 2009 11:49:44
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.1 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define MAXN 64
#define MARE 2000000000

long dl[5] = {-1, 0, 1, 0};
long dc[5] = {0, 1, 0, -1};
long n, m, k, x1, y1, x2, y2, s1[4096], s2[4096], o, i, j;
long a[MAXN][MAXN], v[MAXN][MAXN];

void init() {
	for (long i = 1; i <= 50; ++i) {
		for (long j = 1; j <= 50; ++j) {
			v[i][j] = MARE;
		}
	}
}

long lee() {
	for (long i = 1; i <= o; ++i) {
		for (long j = 0; j <= 3; ++j) {
			if (a[s1[i] + dl[j]][s2[i] + dc[j]] != 0) {
				if (v[s1[i] + dl[j]][s2[i] + dc[j]] > v[s1[i]][s2[i]] + 1) {
					v[s1[i] + dl[j]][s2[i] + dc[j]] = v[s1[i]][s2[i]] + 1;
					++o;
					s1[o] = s1[i] + dl[j];
					s2[o] = s2[i] + dc[j];
				}
			}
		}
	}
	return v[x2][y2];
}

int main() {
	freopen("kdrum.in", "r", stdin);
	freopen("kdrum.out", "w", stdout);
	scanf("%ld %ld %ld", &n, &m, &k);
	scanf("%ld %ld %ld %ld", &x1, &y1, &x2, &y2);
	for (i = 1; i <= n; ++i) {
		for (j = 1; j <= m; ++j) {
			scanf("%ld", &a[i][j]);
		}
	}
	s1[1] = x1;s2[1] = y1;o = 1;
	init();
	v[x1][y1] = 1;	
	printf("%ld\n", lee());
	return 0;
}