Cod sursa(job #306438)

Utilizator Mishu91Andrei Misarca Mishu91 Data 20 aprilie 2009 19:52:54
Problema Matrice 2 Scor Ascuns
Compilator cpp Status done
Runda Marime 1.1 kb
#include <fstream>

using namespace std;

#define MAXN 310
#define MAXX 90010
#define MAXL 4

const int dirx[MAXL] = {-1, 0, 1, 0};
const int diry[MAXL] = {0, -1, 0, 1};

int N, Q, L;
int A[MAXN][MAXN];
int U[MAXN][MAXN];
int SX[MAXX], SY[MAXX];

int BFS(int X1, int Y1, int X2, int Y2, int H)
{
	int i, j, cx, cy;

	for (i = 1; i <= N; i++)
		for (j = 1; j <= N; j++) U[i][j] = 0;

	L = 1;
	SX[L] = X1;
	SY[L] = Y1;
	U[X1][Y1] = 1;

	for (i = 1; i <= L; i++)
		for (j = 0; j < MAXL; j++)
		{
			cx = SX[i] + dirx[j];
			cy = SY[i] + diry[j];

			if (cx > 0 && cy > 0 && cx <= N && cy <= N && A[cx][cy] >= H && !U[cx][cy])
			{
				L++;
				SX[L] = cx;
				SY[L] = cy;
				U[cx][cy] = 1;

				if (cx == X2 && cy == Y2) return 1;
			}
		}

	return 0;
}

int main()
{
	ifstream fin("matrice2.in");
	ofstream fout("matrice2.out");

	int i, j, X1, Y1, X2, Y2;

	fin >> N >> Q;

	for (i = 1; i <= N; i++)
		for (j = 1; j <= N; j++) fin >> A[i][j];

	for (i = 1; i <= Q; i++)
	{
		fin >> X1 >> Y1 >> X2 >> Y2;

		for (j = A[X1][Y1]; j > 0; j--)
			if (BFS(X1, Y1, X2, Y2, j))
			{
				fout << j << endl;
				break;
			}
	}

	return 0;
}