Pagini recente » Cod sursa (job #452064) | Cod sursa (job #1633481) | Cod sursa (job #1539890) | Cod sursa (job #2839616) | Cod sursa (job #1654745)
#include <cstdio>
#include <algorithm>
#define x first
#define y second
#include <queue>
#define N 155
#include <vector>
using namespace std;
int X,Y,n,m,i,j,pas=0,k,cheie[N*N];
queue<int> q;
vector<int> v[N*N];
bool ajuns[N*N],atins[N*N];
bool V(int x)
{
return (x>0 && x<=n*m);
}
inline void lee()
{
q.push(k);ajuns[k]=1;
while(!q.empty())
{
k=q.front();
q.pop();
int v1,v2,v3,v4,i;
v1=k+1;
v2=k-1;
v3=k-m;
v4=k+m;
if(V(v1) && ajuns[cheie[v1]] && !ajuns[v1]) q.push(v1), ajuns[v1]=1;
if(V(v2) && ajuns[cheie[v2]] && !ajuns[v2]) q.push(v2), ajuns[v2]=1;
if(V(v3) && ajuns[cheie[v3]] && !ajuns[v3]) q.push(v3), ajuns[v3]=1;
if(V(v4) && ajuns[cheie[v4]] && !ajuns[v4]) q.push(v4), ajuns[v4]=1;
atins[v1]=atins[v2]=atins[v3]=atins[v4]=1;
for(i=0;i<v[k].size();++i)
if(atins[v[k][i]] && !ajuns[v[k][i]])
q.push(v[k][i]), ajuns[v[k][i]]=1;
}
}
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
int nr=0;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
scanf("%d",&nr), v[nr].push_back(i*m-m+j), cheie[i*m-m+j]=nr;
lee();
int ans=0;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
if(ajuns[i*m+j-m]) ++ans;
printf("%d\n",ans);
return 0;
}