Pagini recente » Cod sursa (job #3150227) | Cod sursa (job #2355856) | Cod sursa (job #3226974) | Diferente pentru documentatie/arhiva-educationala intre reviziile 2 si 3 | Cod sursa (job #423936)
Cod sursa(job #423936)
#include<fstream>
using namespace std;
ifstream fin("matrice2.in");
ofstream fout("matrice2.out");
#define Nmax 310
#define min(a,b) (a<b?a:b)
int T,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};
struct nod{int x,y;nod* next;};
typedef nod *lista;
lista Q,Qf;
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;
Q=Qf=new nod;
Q->x=x1;Q->y=y1;
X[x1][y1]=A[x1][y1];
viz[x1][y1]=1;
while(Q)
{
int i,j;
i=Q->x;j=Q->y;
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;
Qf->next=new nod;
Qf=Qf->next;
Qf->x=ii;
Qf->y=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;
Qf->next=new nod;
Qf=Qf->next;
Qf->x=ii;
Qf->y=jj;
}
}
}
}
viz[i][j]=0;
lista aux=Q;
Q=Q->next;
delete aux;
}
fout<<X[x2][y2]<<"\n";
}
int main()
{
fin>>N>>T;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
fin>>A[i][j];
while(T--)
{
fin>>x1>>y1>>x2>>y2;
solve();
}
}