Pagini recente » Cod sursa (job #2839627) | Cod sursa (job #2795958) | Cod sursa (job #2163790) | Cod sursa (job #1683164) | Cod sursa (job #2840595)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("matrice2.in");
ofstream g ("matrice2.out");
int n,m;
int mt[505][505];
int q;
int a[505][505];
queue <pair <int, int >> Q;
int di[4]= {0, 0, 1, -1};
int dj[4]= {1, -1, 0, 0};
int ok1(int i, int j, int val)
{
if(i<1 || j<1 || i>n || j>n)
return 0;
if(a[i][j]!=0)
return 0;
if(mt[i][j]<val)
return 0;
return 1;
}
int ok(int val,int istart, int jstart,int ifin,int jfin)
{
if(mt[istart][jstart]>=val)
{
Q.push({istart, jstart});
a[istart][jstart]=1;
while(!Q.empty())
{
int i=Q.front().first;
int j=Q.front().second;
///cout<<val<<" "<<i<<" "<<j<<" "<<mt[i][j]<<"\n";
if(i==ifin && j==jfin)
{
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j)
a[i][j]=0;
while(!Q.empty())
Q.pop();
return 1;
}
for(int x=0; x<4; ++x)
{
if(ok1(i+di[x], j+dj[x], val))
{
a[i+di[x]][j+dj[x]]=1;
Q.push({i+di[x], j+dj[x]});
}
}
Q.pop();
}
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j)
a[i][j]=0;
while(!Q.empty())
Q.pop();
return 0;
}
else
return 0;
}
int main()
{
f>>n>>q;
int maxim=0;
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=n; ++j)
{
f>>mt[i][j];
maxim=max(maxim, mt[i][j]);
}
}
for(int query=1; query<=q; ++query)
{
int iprim, jprim;
int isecund, jsecund;
f>>iprim>>jprim>>isecund>>jsecund;
int st=1;
int dr=maxim;
int mij=(st+dr)/2;
int rez=0;
while(st<=dr)
{
if(ok(mij, iprim, jprim, isecund, jsecund))
{
rez=mij;
st=mij+1;
}
else
dr=mij-1;
mij=(st+dr)/2;
}
g<<rez<<"\n";
}
return 0;
}