Cod sursa(job #328999)

Utilizator omu_salcamtache tudor omu_salcam Data 4 iulie 2009 12:42:10
Problema Matrice 2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<stdio.h>
FILE *f1,*f2;
long a,b,i,j,n,m,q,ma[302][302],fill[302][302];
int l1[10000],l2[10000],d1,d2,ok,li,ls,ii,jj;
long min(long x,long y){
	if(x>y){
		return y;
	}
	return x;
}
int main(){
	f1=fopen("matrice2.in","r");
	f2=fopen("matrice2.out","w");
	fscanf(f1,"%ld%ld",&n,&q);
	for(i=1;i<=n;i++){
		for(j=1;j<=n;fscanf(f1,"%ld",&ma[i][j]),j++);
	}
	for(i=1;i<=q;i++){
		for(ii=1;ii<=n;ii++){
			for(jj=1;jj<=n;fill[ii][jj]=0,jj++);
		}
		fscanf(f1,"%d%d%d%d",&l1[1],&l2[1],&d1,&d2);
		fill[l1[1]][l2[1]]=ma[l1[1]][l2[1]];
//		fill[d1][d2]=ma[d1][d2];
		li=0;
		ls=1;
		while(li<ls){
			li++;
			//sus
			a=min(ma[l1[li]-1][l2[li]],fill[l1[li]][l2[li]]);
			if(l1[li]>1&&fill[l1[li]-1][l2[li]]<a){
				ls++;
				l1[ls]=l1[li]-1;
				l2[ls]=l2[li];
				fill[l1[ls]][l2[ls]]=a;
			}
			//jos
			a=min(ma[l1[li]+1][l2[li]],fill[l1[li]][l2[li]]);
			if(l1[li]<n&&fill[l1[li]+1][l2[li]]<a){
				ls++;
				l1[ls]=l1[li]+1;
				l2[ls]=l2[li];
				fill[l1[ls]][l2[ls]]=a;
			}
			//stanga
			a=min(ma[l1[li]][l2[li]-1],fill[l1[li]][l2[li]]);
			if(l2[li]>1&&fill[l1[li]][l2[li]-1]<a){
				ls++;
				l1[ls]=l1[li];
				l2[ls]=l2[li]-1;
				fill[l1[ls]][l2[ls]]=a;
			}
			//dreapta
			a=min(ma[l1[li]][l2[li]+1],fill[l1[li]][l2[li]]);
			if(l2[li]<n&&fill[l1[li]][l2[li]+1]<a){
				ls++;
				l1[ls]=l1[li];
				l2[ls]=l2[li]+1;
				fill[l1[ls]][l2[ls]]=a;
			}
		}
		fprintf(f2,"%ld\n",fill[d1][d2]);
	}
	return 0;
}