Pagini recente » Cod sursa (job #736704) | Cod sursa (job #728501) | Cod sursa (job #1480182) | Cod sursa (job #1871596) | Cod sursa (job #1403278)
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream f("matrice2.in");
ofstream g("matrice2.out");
int M, N, a[305][305], stx, sty, fnx, fny, vmax, dx[4]={-1, 0, 1, 0}, dy[4]={0, -1, 0, 1}, sol;
queue < pair <int, int> > Q;
int viz[305][305];
bool check(int val)
{
if (a[stx][sty]<val || a[fnx][fny]<val) return 0;
Q.push(make_pair(stx, sty));
memset(viz, 0, sizeof(viz));
viz[stx][sty]=1;
while (Q.size())
{
pair <int, int> nod=Q.front(); Q.pop();
for (int k=0; k<4; ++k)
{
int auxx=nod.first+dx[k], auxy=nod.second+dy[k];
if (a[auxx][auxy]>=val && !viz[auxx][auxy])
viz[auxx][auxy]=1, Q.push(make_pair(auxx, auxy));
}
}
return (viz[fnx][fny]);
}
int main()
{
f>>N>>M;
for (int i=1; i<=N; ++i)
for (int j=1; j<=N; ++j)
{
f>>a[i][j];
if (a[i][j]>vmax) vmax=a[i][j];
}
while (M--)
{
f>>stx>>sty>>fnx>>fny; sol=0;
for (int i=(1<<20); i; i>>=1)
if (sol+i<=vmax && check(sol+i))
sol+=i;
g<<sol<<'\n';
}
return 0;
}