Cod sursa(job #74837)
#include<fstream.h>
long a[155][155],N,M,L,b[425000],c[155][155];
long long nr;
void citire(){
ifstream fin("castel.in");
fin>>N>>M>>L;
for (int i=0;i<N;i++)
for (int j=0;j<M;j++){
fin>>a[i][j];
c[i][j]=i*M+j+1;}
fin.close();
}
long long numarare(){
a[L/M][L%M-1]=-1;
b[L]=1;
/*for (int u=0;u<N;u++)
for (int j=0;j<M;j++)
if (c[u][j]==L){
a[u][j]=-1;
b[L]=1;
break; } */
nr=0;
short k=1;
while (k){
k=0;
for (int i=0;i<N;i++)
for (int j=0;j<M;j++)
if (a[i][j]==-1){
if (b[a[i][j+1]]==1&&a[i][j+1]!=-1&&j<M-1){
b[c[i][j+1]]=1;
a[i][j+1]=-1;
k=1; }
if (b[a[i][j-1]]==1&&a[i][j-1]!=-1&&j>0){
b[c[i][j-1]]=1;
a[i][j-1]=-1;
k=1;}
if (b[a[i+1][j]]==1&&a[i+1][j]!=-1&&i<N-1){
b[c[i+1][j]]=1;
a[i+1][j]=-1;
k=1;}
if (b[a[i-1][j]]==1&&a[i-1][j]!=-1&&i>0){
b[c[i-1][j]]=1;
a[i-1][j]=-1;
k=1;}
}
}
for (int t=0;t<N;t++)
for (int r=0;r<M;r++)
if (a[t][r]==-1)
nr++;
return nr;
}
int main(){
citire();
ofstream fout("castel.out");
fout<<numarare();
fout.close();
return 0;
}