Pagini recente » Cod sursa (job #1811836) | Cod sursa (job #3204460) | Cod sursa (job #2178053) | Cod sursa (job #939123) | Cod sursa (job #724103)
Cod sursa(job #724103)
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
struct coord
{int x,y;} ;
int m[303][303],ok[303][303];
bool operator < (coord a, coord b)
{return m[a.x][a.y]<m[b.x][b.y];}
priority_queue <coord> Q;
void make(int x,int y)
{coord a;
a.x=x;a.y=y;
Q.push(a);
}
int main()
{
int n,q,i,j,dx[5]={-1,0,1,0},dy[5]={0,1,0,-1};
freopen("matrice2.in","r",stdin);
freopen("matrice2.out","w",stdout);
scanf("%d %d",&n,&q);
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
scanf("%d",&m[i][j]);
while (q--)
{
int ax,ay,bx,by,mini;
scanf("%d %d %d %d",&ax,&ay,&bx,&by);
memset(ok,0,sizeof(ok));
make(ax,ay);mini=m[ax][ay];
while (!ok[bx][by])
{
ax=Q.top().x;ay=Q.top().y;
Q.pop();
if (m[ax][ay]<mini) mini=m[ax][ay];
for (i=0;i<4;++i)
if (!ok[ax+dx[i]][ay+dy[i]])
ok[ax+dx[i]][ay+dy[i]]=1,make(ax+dx[i],ay+dy[i]);
}
printf("%d\n",mini);
Q=priority_queue<coord>();
}
return 0;
}