Pagini recente » Cod sursa (job #2024857) | Cod sursa (job #494682) | Cod sursa (job #942615) | Cod sursa (job #1133123) | Cod sursa (job #423927)
Cod sursa(job #423927)
#include<fstream>
using namespace std;
ifstream fin("matrice.in");
ofstream fout("matrice.out");
#define Nmax 310
#define min(a,b) (a<b?a:b)
int Q,N,A[Nmax][Nmax];
int x1,x2,y1,y2;
int X[Nmax][Nmax],viz[Nmax][Nmax];
int dx[]={1,0,-1,0},
dy[]={0,1,0,-1};
int x[Nmax*Nmax],y[Nmax*Nmax];
void clear()
{
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
X[i][j]=viz[i][j]=0;
}
int valid(int i,int j)
{
return i && j && i<=N && j<=N;
}
void solve()
{
clear();
int li=0,lf=1;
x[1]=x1;y[1]=y1;
X[x1][y1]=A[x1][y1];
viz[x1][y1]=1;
while(li<=lf)
{
li++;
int i,j;
i=x[li];j=y[li];
for(int k=0;k<4;k++)
if(valid(i+dx[k],j+dy[k]))
{
int ii=i+dx[k],jj=j+dy[k];
if(X[ii][jj]==0)
{
X[ii][jj]=min(A[ii][jj],X[i][j]);
viz[ii][jj]=1;
x[++lf]=ii;
y[lf]=jj;
}
else
{
if(min(A[ii][jj],X[i][j])>X[ii][jj])
{
X[ii][jj]=min(A[ii][jj],X[i][j]);
if(viz[ii][jj]==0)
{
viz[ii][jj]=1;
x[++lf]=ii;
y[lf]=jj;
}
}
}
}
viz[i][j]=0;
}
fout<<X[x2][y2]<<"\n";
}
int main()
{
fin>>N>>Q;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
fin>>A[i][j];
while(Q--)
{
fin>>x1>>y1>>x2>>y2;
solve();
}
}