Pagini recente » Cod sursa (job #1134268) | Cod sursa (job #3216618) | Cod sursa (job #3191149) | Cod sursa (job #2764992) | Cod sursa (job #2083450)
#include <fstream>
using namespace std;
ifstream in("matrice2.in");
ofstream out("matrice2.out");
const int N = 301, dx[] = {-1,0,1,0}, dy[] = {0,1,0,-1};
int mat[N][N], xf, yf;
short int cx[N*N], cy[N*N];
bool s[N][N];
bool bun(int i, int j, int n){
return (i >= 1 && j >= 1 && i <= n && j <= n);
}
void sterg(int n){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
s[i][j] = false;
}
bool bfs(int xi, int yi, int val, int n){
if(mat[xi][yi] < val)
return false;
int st = 1, dr = 1, k,xc,yc,x,y;
cx[st] = xi;
cy[st] = yi;
sterg(n);
s[xi][yi] = true;
while(st <= dr){
x = cx[st];
y = cy[st];
st++;
for(k=0;k<4;k++){
xc = x + dx[k];
yc = y + dy[k];
if(bun(xc,yc,n) && s[xc][yc] == false && mat[xc][yc] >= val){
s[xc][yc] = true;
cx[++dr] = xc;
cy[dr] = yc;
}
}
}
return (s[xf][yf] == true);
}
void solve(int xi, int yi, int n){
int i,step, Max = mat[xf][yf];
for(step=1;step < Max;step <<= 1);
for(i=0;step;step >>= 1)
if(bfs(xi,yi, i + step, n))
i += step;
out<<i<<"\n";
}
int main()
{
int n,q,xi,yi;
in>>n>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
in>>mat[i][j];
for(int i=1;i<=q;i++){
in>>xi>>yi>>xf>>yf;
solve(xi,yi,n);
}
out.close();
return 0;
}