Pagini recente » Cod sursa (job #2095677) | Cod sursa (job #847775) | Cod sursa (job #289828) | Cod sursa (job #635569) | Cod sursa (job #1952232)
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream f("matrice2.in");
ofstream g("matrice2.out");
int n, m, i, j, a[305][305];
int x1, Y1, x2, y2, x, y, xx, yy;
int Amax;
bool viz[305][305];
int coada[2][1000005], st, dr;
int dx[] = {-1,0,1,0},dy[]={0,1,0,-1};
bool posib(int W) {
memset(viz,0,sizeof(viz));
if (a[x1][Y1] < W) {
return 0;
}
coada[0][st=dr=1] = x1;
coada[1][st] = Y1;
viz[x1][Y1] = 1;
int i;
while (st <= dr) {
x = coada[0][st];
y = coada[1][st]; st++;
for (i = 0; i < 4; i++) {
xx = x+dx[i];
yy = y+dy[i];
if (xx < 1 || xx > n || yy < 1 || yy > n) continue;
if (a[xx][yy] >= W) {
if (xx==x2 && yy==y2) return 1;
}
if (viz[xx][yy] == 0 && a[xx][yy] >= W) {
if (xx==x2 && yy==y2) return 1;
viz[xx][yy] = 1;
coada[0][++dr] = xx;
coada[1][dr] = yy;
}
}
}
return 0;
}
int main() {
f >> n >> m;
for (i = 1; i<= n;i++)
for (j = 1; j <= n; j++)
f >> a[i][j], Amax = max(Amax,a[i][j]);
for (int w = 1; w <= m; w++) {
f >> x1 >> Y1 >> x2 >> y2;
int p = 1;
while (p < Amax) p *= 2;
j = 0;
for(;p;p/=2) {
if (j + p <= Amax) {
if (posib(j+p))
j+=p;
}
}
g << j << '\n';
}
}