Cod sursa(job #150484)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 6 martie 2008 23:34:23
Problema Castel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
//problema castel
#include<fstream.h>
#include<stdlib.h>
ifstream f("castel.in");
ofstream g("castel.out");

int main(){
int * l[40000];
int m,n,k,i,o,ch[40000],s,d,q[40000],u[40000],x,y;
f>>m>>n>>k;
o=m*n;
	for(i=1;i<=o;i++){
		l[i]=(int *)realloc(l[i],sizeof(int));
		l[i][0]=0;
		f>>ch[i];
		u[i]=0;
			 }
	f.close();
	s=d=0;
	q[s]=k;
	u[k]=1;
	while(s<=d){
		x=q[s];
		for(i=1;i<=l[x][0];i++){
			u[l[x][i]]=1;
			d++;
			q[d]=l[x][i];
					  }
		l[x]=(int *)realloc(l[x],sizeof(int));
		if(x%m!=0){
			 y=x+1;
			 if(u[y]==0) if(u[ch[y]]==1){
					u[y]=1;
					d++;
					q[d]=y;
						    }
				     else{
					l[ch[y]][0]++;
					l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
					l[ch[y]][l[ch[y]][0]]=y;
					 }
			  }
		//daca exista elem dr
		if(x%m!=1){
			y=x-1;
			if(u[y]==0) if(u[ch[y]]==1){
					u[y]=1;
					d++;
					q[d]=y;
						    }
				     else{
					l[ch[y]][0]++;
					l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
					l[ch[y]][l[ch[y]][0]]=y;
					 }
			  }
		//daca exista elem stg
		if(x>n){
			y=x-n;
			if(u[y]==0) if(u[ch[y]]==1){
					u[y]=1;
					d++;
					q[d]=y;
						    }
				     else{
					l[ch[y]][0]++;
					l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
					l[ch[y]][l[ch[y]][0]]=y;
					 }
		       }
		//daca exista elem sus
		if(x<=o-n){
			y=x+n;
			if(u[y]==0) if(u[ch[y]]==1){
					u[y]=1;
					d++;
					q[d]=y;
						    }
				     else{
					l[ch[y]][0]++;
					l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
					l[ch[y]][l[ch[y]][0]]=y;
					 }
			  }
		//daca exista elem jos
		s++;
		   }
	int r=0;
	for(i=1;i<=o;i++)
		if(u[i]==1) r++;
	g<<r;
	g.close();
return 0;}