Cod sursa(job #717055)

Utilizator andreas_mihAndreas Mihaloianis andreas_mih Data 19 martie 2012 16:38:31
Problema Matrice 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<stdio.h>
#include<vector>
using namespace std;
FILE*in=fopen("matrice2.in","r");
FILE*out=fopen("matrice2.out","w");
void rezolva(int a,int b,int c,int d);
void parcurgere(int a, int b, int min);
int n,m,xS,yS,xF,yF,maxim,h,rezultat;
int v[301][301];
bool viz[301][301],ajuns;
int main()
{
	fscanf(in,"%d%d",&n,&m);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
		{
			fscanf(in,"%d",&v[i][j]);
			if(v[i][j]>maxim)
				maxim=v[i][j];
		}
	for(int i=1;i<=m;++i)
	{
		fscanf(in,"%d%d%d%d",&xS,&yS,&xF,&yF);
		rezolva(xS,yS,xF,yF);
		fprintf(out,"%d\n",rezultat);
	}
	
	
fclose(in);
fclose(out);
return 0;
}
void rezolva(int a,int b,int c,int d)
{
	h=rezultat=0;
	while(h<=v[xS][yS])
	{
		if(ajuns)
		{
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)
				viz[i][j]=false;
		}
		ajuns=false;
		parcurgere(a,b,maxim);
		++h;
	}
}
void parcurgere(int a,int b,int min)
{
	viz[a][b]=true;
	if(a!=xF || b!=yF)
	{
		if(v[a+1][b] && v[a+1][b] > h && !viz[a+1][b])
		{
			if(min>v[a+1][b])
				min=v[a+1][b];
			parcurgere(a+1,b,min);
		}
		if(v[a][b+1] && v[a][b+1] > h && !viz[a][b+1])
		{
			if(min>v[a][b+1])
				min=v[a][b+1];
			parcurgere(a,b+1,min);
		}	
		if(v[a-1][b] && v[a-1][b] > h && !viz[a-1][b])
		{
			if(min>v[a-1][b])
				min=v[a-1][b];
			parcurgere(a-1,b,min);
		}
		if(v[a][b-1] && v[a][b-1] > h && !viz[a][b-1])
		{
			if(min>v[a][b-1])
				min=v[a][b-1];
			parcurgere(a,b-1,min);
		}
	}
	else
	{
		h=min;
		rezultat=min;
		ajuns=true;
	}
}