Pagini recente » Cod sursa (job #2947053) | Cod sursa (job #1888117) | Cod sursa (job #889119) | Cod sursa (job #2026470) | Cod sursa (job #579718)
Cod sursa(job #579718)
#include<cstdio>
int a[160][160];
int b[160][160];
int c[160][160];
int key[25000];
int cd_u[25000];
int cd_d[25000];
int n,m,p,i,sw,max=1;
int first=1,last=1;
void read(){
int c;
scanf("%d%d%d",&n,&m,&c);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
b[i][j]=(i-1)*m+j;
if(b[i][j]==c){
cd_u[1]=i;
cd_d[1]=j;
}
}
}
int state(int x,int y){
if(x<1) return 0;
if(y<1) return 0;
if(x>n) return 0;
if(y>m) return 0;
if(c[x][y]) return 0;
return 1;
}
void coada(int x,int y){
c[x][y]=1;
max++;
cd_u[++last]=x;
cd_d[last]=y;
sw=0;
}
void fill(int x,int y){
if(state(x+1,y) && key[a[x+1][y]]){
coada(x+1,y);
key[b[x+1][y]]=1;
}
if(state(x-1,y) && key[a[x-1][y]]){
coada(x-1,y);
key[b[x-1][y]]=1;
}
if(state(x,y+1) && key[a[x][y+1]]){
coada(x,y+1);
key[b[x][y+1]]=1;
}
if(state(x,y-1) && key[a[x][y-1]]){
coada(x,y-1);
key[b[x][y-1]]=1;
}
}
int main(){
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
read();
c[cd_u[1]][cd_d[1]]=1;
key[b[cd_u[1]][cd_d[1]]]=1;
while(!sw){
sw=1;
p=last;
for(i=1;i<=p;i++)
fill(cd_u[i],cd_d[i]);
first=p+1;
}
printf("%d",max);
return 0;
}