Cod sursa(job #60294)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 13 mai 2007 15:58:32
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#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);
	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;
}