Cod sursa(job #719061)

Utilizator lily3Moldovan Liliana lily3 Data 21 martie 2012 13:04:03
Problema Matrice 2 Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
using namespace std;

int dx[4]={-1,0,1,0};
int dy[4] = {0,1,0,-1};
int n,q,l,sol,a[310][310],u[310][310];
int sx[90010],sy[90010];
int verif(int x,int y,int h)
{
	return(x<=0||y<=0||x>n||y>n||u[x][y]||a[x][y]<h);
}
int bfs(int X1,int Y1,int X2,int Y2,int h)
{
	int i,j,xx,yy;
	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<4;++j)
		{
			xx=sx[i]+dx[j];
			yy=sy[i]+dy[j];
			if(verif(xx,yy,h))
				continue;
				sx[++l]=xx;
				sy[l]=yy;
				u[xx][yy]=1;
				if(xx==X2&&yy==Y2) 
					return 1;
		}
	return 0;
}

int main()
{
	ifstream f("matrice2.in");
	ofstream g("matrice2.out");
	int i,j,ix,iy,sx,sy;
	f>>n>>q;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= n; j++) 
			f>>a[i][j];
	for (i = 1; i <= q; i++)
	{
		f>>ix>>iy>>sx>>sy;
		int st=1, mij,dr=a[ix][iy];
		sol=0;
		while (st<=dr)
		{
			mij=(st+dr)/2;
			if (bfs(ix,iy,sx,sy,mij))
			{
				st=mij+1;
				sol=mij;
			}
			else 
				dr=mij-1;
		}
		g<<sol<<"\n";
	}
	return 0;
}