Pagini recente » Borderou de evaluare (job #2692783) | Cod sursa (job #2474651) | Cod sursa (job #2708479) | Cod sursa (job #2700400) | Cod sursa (job #2763895)
#include <fstream>
using namespace std;
ifstream fin ("matrice2.in");
ofstream fout ("matrice2.out");
int n, q, mat[305][305];
bool vis[305][305];
const int ox[] = { 1, -1, 0, 0 };
const int oy[] = { 0, 0, 1, -1};
void solve( int x, int y, const int cost ) {
vis[ x ][ y ] = true;
for ( short int l = 0; l < 4; l++ ) {
int x2 = x + ox[l];
int y2 = y + oy[l];
if ( !vis[x2][y2] && mat[x2][y2] >= cost )
solve( x2, y2, cost );
}
}
bool PathExists ( int x1, int y1, int x2, int y2, const int cost ) {
for ( int i = 1; i <= n; i++ ) {
for ( int j = 1; j <= n; j++ )
vis[i][j] = false;
}
solve( x1, y1, cost );
if ( vis[ x2 ][ y2 ] )
return true;
else
return false;
}
void BinarySearch ( int x1, int y1, int x2, int y2 ) {
int lo = 1, hi = min ( mat[x1][y1], mat[x2][y2] );
while ( lo <= hi ) {
int mid = lo + ( hi-lo )/2;
if ( PathExists( x1, y1, x2, y2, mid ) )
lo = mid + 1;
else
hi = mid - 1;
}
fout << hi << "\n";
}
void read () {
fin >> n >> q;
for ( int i = 1; i <= n; i++ ) {
for ( int j = 1; j <= n; j++ )
fin >> mat[i][j];
}
}
int main()
{
read();
int x, y, z, t;
while ( q-- ) {
fin >> x >> y >> z >> t;
BinarySearch( x, y, z, t );
}
return 0;
}