Pagini recente » Cod sursa (job #1274212) | Cod sursa (job #480797) | Cod sursa (job #1048156) | Cod sursa (job #3139060) | Cod sursa (job #719061)
Cod sursa(job #719061)
#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;
}