Pagini recente » Cod sursa (job #1359359) | Cod sursa (job #317693) | Cod sursa (job #1503941) | Cod sursa (job #2852931) | Cod sursa (job #60295)
Cod sursa(job #60295)
#include <stdio.h>
#include <vector>
using namespace std;
#define pb push_back
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define sz size()
#define nmax 22501
int n,m,sol,viz[nmax],A[nmax],x;
vector <int> G[nmax];
int test(int i)
{
return ((i%m!=0&&viz[i-1])||(i%m!=m-1&&viz[i+1])||
(i+m<n*m&&viz[i+m])||(i-m>=0&&viz[i-m]));
}
void parc(int i)
{
if(viz[i])
return ;
viz[i]=1;sol++;
if(i%m!=0&&viz[A[i-1]])
parc(i-1);
if(i%m!=m-1&&viz[A[i+1]])
parc(i+1);
if(i+m<n*m&&viz[A[i+m]])
parc(i+m);
if(i-m>=0&&viz[A[i-m]])
parc(i-m);
int j;
FOR(j,0,G[i].sz)
if(test(G[i][j]))
parc(G[i][j]);
}
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
int i;
scanf("%d %d %d",&n,&m,&x);x--;
FOR(i,0,n*m)
{
scanf("%d",&A[i]);
A[i]--;
G[A[i]].pb(i);
}
parc(x);
printf("%d\n",sol);
return 0;
}