Cod sursa(job #1188392)

Utilizator preda_alexandruPreda Alexandru preda_alexandru Data 19 mai 2014 15:58:26
Problema Matrice 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>
#define NMAX 300


void f1(int A[NMAX][NMAX], int B[NMAX][NMAX], int N, int x)
{
	int i, j;
	for(i=0; i<N; i++)
		for(j=0; j<N; j++)
			B[i][j] = A[i][j]>=x ? 1 : 0;
}


int f2(int B[NMAX][NMAX], int N, int xc, int yc, int xf, int yf)
{
	if(xc==xf && yc==yf)
		return 1;

	if(xc<0 || xc>=N || yc<0 || yc>=N)
		return 0;

	if(!B[xc][yc])
		return 0;

	B[xc][yc] = 0;

	return f2(B, N, xc+1, yc, xf, yf) ||
		f2(B, N, xc-1, yc, xf, yf) ||
		f2(B, N, xc, yc+1, xf, yf) ||
		f2(B, N, xc, yc-1, xf, yf);
}

int A[NMAX][NMAX];
int B[NMAX][NMAX];

int main()
{
	FILE *fin, *fout;
	int i, j, N, Q, x1, y1, x2, y2, max12;


	fin = fopen("matrice2.in", "rt");
	fout = fopen("matrice2.out", "wt");


	fscanf(fin, "%d %d", &N, &Q);
	for(i=0; i<N; i++)
		for(j=0; j<N; j++)
			fscanf(fin, "%d", &A[i][j]);


	for(i=1; i<=Q; i++)
	{
		fscanf(fin, "%d %d %d %d", &x1, &y1, &x2, &y2);
		x1--; y1--; x2--; y2--;
		max12 = A[x1][y1]>A[x2][y2] ? A[x1][y1] : A[x2][y2];

		for(j=max12; j>=1; j--)
		{
			f1(A, B, N, j);
			if(f2(B, N, x1, y1, x2, y2))
			{
				fprintf(fout, "%d\n", j);
				break;
			}
		}
	}

	fclose(fin);
	fclose(fout);
	return 0;
}