Pagini recente » Cod sursa (job #2702158) | Cod sursa (job #1492194) | Cod sursa (job #1600104) | Cod sursa (job #3123126) | Cod sursa (job #434409)
Cod sursa(job #434409)
#include<fstream>
#define min(x,y) (x<y? x:y);
using namespace std;
fstream fin("matrice2.in",ios::in);
fstream fout("matrice2.out",ios::out);
struct Coada{int x,y; Coada *urm;};
struct poz{int x,y;};
int n,*A[301];
int *C[301],Q;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
void Citire()
{
int i,j;
fin>>n>>Q;
for(i=1;i<=n;i++)
{
C[i]=(int*)calloc(n,sizeof(int));
A[i]=(int*)calloc(n,sizeof(int));
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>A[i][j];
}
void Init()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
C[i][j]=0;
}
void Rezolvare()
{
poz I,F;
int i,x,y,xnou,ynou;
bool plasat;
Coada *prim,*ultim,*p,*cont;
while(Q--)
{
fin>>I.x>>I.y>>F.x>>F.y;
prim=new Coada;
ultim=prim;
prim->x=I.x;
prim->y=I.y;
prim->urm=NULL;
Init();
C[I.x][I.y]=A[I.x][I.y];
while(prim!=NULL&&!C[F.x][F.y])
{
x=prim->x;
y=prim->y;
for(i=0;i<4;i++)
{
xnou=x+dx[i];
ynou=y+dy[i];
if(xnou>0&&ynou>0&&xnou<=n&&ynou<=n&&!C[xnou][ynou])
{
C[xnou][ynou]=min(C[x][y],A[xnou][ynou]);
//plasam in valoarea in coada;
plasat=false;
p=new Coada;
p->x=xnou;
p->y=ynou;
p->urm=NULL;
cont=prim;
if(C[ultim->x][ultim->y]>=C[p->x][p->y])
{
ultim->urm=p;
ultim=p;
plasat=true;
}
while(cont->urm!=NULL&&!plasat)
{
if(C[p->x][p->y]>=C[cont->urm->x][cont->urm->y]&&C[p->x][p->y]<=C[cont->x][cont->y])
{
p->urm=cont->urm;
cont->urm=p;
plasat=true;
}
cont=cont->urm;
}
}
}
p=prim;
prim=prim->urm;
delete p;
}
fout<<C[F.x][F.y];
if(Q) fout<<endl;
}
}
int main()
{
Citire();
Rezolvare();
return 0;
}