Cod sursa(job #418750)

Utilizator bog29Antohi Bogdan bog29 Data 16 martie 2010 12:36:37
Problema Matrice 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<fstream>
#include<queue>
#define dmax 305
using namespace std;
ifstream in("matrice2.in");
ofstream out("matrice2.out");

int n,q,a,b,c,d,mat[dmax][dmax],sol[dmax][dmax];
const int dx[]={0,1,0,-1};
const int dy[]={1,0,-1,0};

struct pas
{	int x;
	int y;
	int m;	
};
queue<struct pas> cd;

int bune(int i,int j)
{	return (i>0 && i<=n && j>0 && j<=n);
}

void solve()
{	int ii,jj,k,i,j;
	pas w,crt;
	w.x=a;
	w.y=b;
	w.m=mat[a][b];
	sol[a][b]=mat[a][b];
	cd.push(w);
	while(!cd.empty() )
	{	crt=cd.front();	
		cd.pop();
		for(k=0;k<4;k++)
		{	ii=crt.x+dx[k];
			jj=crt.y+dy[k];
			if(bune(ii,jj) )
			{	if(sol[ii][jj]==0)
				{	sol[ii][jj]=min(crt.m,mat[ii][jj]);
					w.x=ii;
					w.y=jj;
					w.m=sol[ii][jj];
					cd.push(w);
				}	
				else if(crt.m > sol[ii][jj] && mat[ii][jj] >= sol[crt.x][crt.y])
				{	sol[ii][jj]=crt.m;
					w.x=ii;
					w.y=jj;
					w.m=sol[ii][jj];
					cd.push(w);
				}
			}
		}	
	}	
	out<<sol[c][d]<<'\n';
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			sol[i][j]=0;
	cd.empty();	
}

int main()
{	int i,j;
	in>>n>>q;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			in>>mat[i][j];
	for(;q;q--)
	{	in>>a>>b>>c>>d;
		solve();
	}
	in.close();	
	out.close();
	return 0;
}