Pagini recente » Cod sursa (job #2030397) | Cod sursa (job #2277054) | Cod sursa (job #1572189) | Cod sursa (job #2065047) | Cod sursa (job #61366)
Cod sursa(job #61366)
#include <stdio.h>
#define fin "castel.in"
#define fout "castel.out"
#define Nmax 151
struct nod { int x; int y; };
int map[Nmax][Nmax],key[Nmax];
int M,N,P;
nod t1[Nmax*Nmax],t2[Nmax*Nmax];
int d1,d2,ok,ret;
int exp(int x,int y) {
if (x<1 || y<1 || x>M || y>N)
return 1;
if (map[x][y]==-1)
return 1;
if ( key[map[x][y]] == 1 ) {
t2[++d2].x=x;
t2[d2].y=y;
ok=1;
key[(x-1)*N+y]=1;
map[x][y]=-1;
++ret;
return 1;
}
else
return 0;
}
void bf() {
int i,x,y,e;
d2=0; ok=0;
for (i=1;i<=d1;++i) {
e=1; x=t1[i].x; y=t1[i].y;
e=( e & exp(x-1,y) );
e=( e & exp(x+1,y) );
e=( e & exp(x,y+1) );
e=( e & exp(x,y-1) );
if (!e) {
t2[++d2].x=x;
t2[d2].y=y;
}
}
if ( !ok )
return ;
for (i=1;i<=d2;++i)
t1[i]=t2[i];
d1=d2;
bf();
}
int main() {
int i,j,k=0;
freopen(fin,"r",stdin); freopen(fout,"w",stdout);
scanf("%d%d%d",&M,&N,&P);
for (i=1;i<=M;++i)
for (j=1;j<=N;++j) {
scanf("%d",&map[i][j]);
++k;
if (k==P) {
t1[1].x=i; t1[1].y=j;
map[i][j]=-1;
key[P]=1; ret=1;
}
}
d1=1;
bf();
printf("%d\n",ret);
return 0;
}