Cod sursa(job #724103)

Utilizator c_adelinaCristescu Adelina c_adelina Data 26 martie 2012 11:09:24
Problema Matrice 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#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;
}