Pagini recente » Cod sursa (job #725282) | Cod sursa (job #869671) | Cod sursa (job #3239045) | Cod sursa (job #1297297) | Cod sursa (job #1078040)
#include <fstream>
#include <iostream>
#include <math.h>
#include <queue>
using namespace std;
int n, m, x1, x2, y2, i, j, a[305][305], y, sol;
typedef struct str{int x; int y;};
typedef struct str2{int x; int y; int val;};
str2 s;
str aux, aux2;
queue<str> q;
queue<str2> q2;
bool verific(int nr)
{
aux.x=x1;
aux.y=y;
s.x=aux.x;
s.y=aux.y;
s.val=a[aux.x][aux.y];
//cout<<nr<<" "<<x1<<" "<<y<<" "<<a[x1][y]<<"\n";
if(a[x1][y]>=nr)
{
q.push(aux);
a[aux.x][aux.y] = 0;
q2.push(s);
while(!q.empty() )
{
aux2=q.front();
q.pop();
if( a[aux2.x-1][aux2.y] >= nr )
{
aux.x=aux2.x-1;
aux.y=aux2.y;
q.push(aux);
s.x=aux.x;
s.y=aux.y;
s.val=a[aux.x][aux.y];
q2.push(s);
a[aux.x][aux.y]=0;
}
if( a[aux2.x+1][aux2.y] >= nr )
{
aux.x=aux2.x+1;
aux.y=aux2.y;
q.push(aux);
s.x=aux.x;
s.y=aux.y;
s.val=a[aux.x][aux.y];
q2.push(s);
a[aux.x][aux.y]=0;
}
if( a[aux2.x][aux2.y-1] >= nr )
{
aux.x=aux2.x;
aux.y=aux2.y-1;
q.push(aux);
s.x=aux.x;
s.y=aux.y;
s.val=a[aux.x][aux.y];
q2.push(s);
a[aux.x][aux.y]=0;
}
if( a[aux2.x][aux2.y+1] >= nr )
{
aux.x=aux2.x;
aux.y=aux2.y+1;
q.push(aux);
s.x=aux.x;
s.y=aux.y;
s.val=a[aux.x][aux.y];
q2.push(s);
a[aux.x][aux.y]=0;
}
if(a[x2][y2] == 0)
{
while(!q.empty())
q.pop();
while(!q2.empty())
{
s=q2.front();
q2.pop();
a[s.x][s.y]=s.val;
}
return true;
}
}
while(!q2.empty())
{
s=q2.front();
q2.pop();
a[s.x][s.y]=s.val;
}
}
return false;
}
void bin(int l, int r) ///////////
{
int m = (l+r)/2;
//cout<<"MIJLOCUL: "<<l<<" "<<r<<" "<<m<<"\n\n";
if(l > r)
return;
if(verific(m))
{
sol = m;
bin(m+1, r);
}
else
bin(l, m-1);
}
int main()
{
ifstream fin("secv6.in");
ofstream fout("secv6.out");
fin>>n>>m;
for(i = 1; i<=n; i++ )
for( j=1; j<=n; j++ )
fin>>a[i][j];
for(i=1; i<= m ; i++ )
{
fin>>x1>>y>>x2>>y2;
bin(1, min(a[x1][y], a[x2][y2]));
fout<<sol<<"\n";
}
return 0;
}