Cod sursa(job #370294)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 30 noiembrie 2009 18:57:29
Problema Castel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<fstream.h>
ifstream f("castel.in");
ofstream g("castel.out");
int chei[22900],a[151][151],i,j,u,p,m,n,k,x,y,viz[22900],nr,w,b[151][151];
char c[2][5000000];
void citire(){
	f>>m>>n>>k;
	for(i=1;i<=m;i++)
		for(j=1;j<=n;j++)
			{ f>>a[i][j];
			  b[i][j]=(i-1)*n+j;
			}
}
void init(){
	p=1;u=1;
	if(k%n!=0)
	y=k%n;
	else y=n;
	x=k/(n+1)+1;
	chei[a[x][y]]=1;
	c[0][1]=x;
	c[1][1]=y;
	viz[b[x][y]]=1;
	nr=1;w=1;
}
void solve(){
	int dl[4]={1,0,-1,0},dc[4]={0,1,0,-1},k;
	while(p<=u){
		for(k=0;k<=3;k++)
		if(chei[a[c[0][p]+dl[k]][c[1][p]+dc[k]]]==1&&w!=viz[b[c[0][p]+dl[k]][c[1][p]+dc[k]]])
		{ u++;  
		  c[0][u]=c[0][p]+dl[k];
		  c[1][u]=c[1][p]+dc[k];
		  if(viz[b[c[0][p]+dl[k]][c[1][p]+dc[k]]]==0)
			   nr++;
		  if(chei[b[c[0][p]+dl[k]][c[1][p]+dc[k]]]==0)
		  {	  chei[b[c[0][p]+dl[k]][c[1][p]+dc[k]]]=1;
			  w++;
		  }
		  viz[b[c[0][p]+dl[k]][c[1][p]+dc[k]]]=w;
		  
		}
	p++;
	}
}
	
int main(){
citire();
init();
solve();
g<<nr;
return 0;
}