Pagini recente » Cod sursa (job #2050435) | Cod sursa (job #650738) | Cod sursa (job #83219) | Cod sursa (job #2180599) | Cod sursa (job #1221046)
#include <fstream>
#define M 152
using namespace std;
ifstream cin("castel.in");
ofstream cout("castel.out");
int a[M][M],b[M][M],i,j,n,m,p,p1,p2,v[M],q,nr,cc[M];
int x[]={0,0,1,0,-1};
int y[]={0,-1,0,1,0};
struct abc{
int l,c;
}r[M*M];
bool z[M][M];
void bfs(int i,int j);
void searchkey(int x)
{
cc[b[i][j]]=0;
for(int t=0;t<q;t++)
if(a[r[t].l][r[t].c]==x)
bfs(r[t].l,r[t].c);
}
void bfs(int i,int j)
{
v[b[i][j]]=1;
if(z[i][j]==false)nr++,z[i][j]=true;
if(cc[b[i][j]]==1)searchkey(b[i][j]);
for(int k=1;k<=4;k++)
if(i+x[k]<=n && i+x[k]>0 && j+y[k]<=m && j+y[k]>0 && z[i+x[k]][j+y[k]]==false && v[a[i+x[k]][j+y[k]]])bfs(i+x[k],j+y[k]);
else if(i+x[k]<=n && i+x[k]>0 && j+y[k]<=m && j+y[k]>0 && z[i+x[k]][j+y[k]]==false && !v[a[i+x[k]][j+y[k]]])
r[q].l=i+x[k],
r[q].c=j+y[k],
cc[a[r[q].l][r[q].c]]=1,
q++;
}
int main(void)
{
cin>>n>>m>>p;
for(i=q=1;i<=n;i++)
for(j=1;j<=m;j++,q++)
{
cin>>a[i][j];
b[i][j]=q;
if(q==p)p1=i,p2=j;
}
q=0;
bfs(p1,p2);
cout<<nr;
return 0;
}