Cod sursa(job #409743)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 3 martie 2010 20:42:47
Problema Castel Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#define lmax 22555

int n, m, k, v[lmax], ua[lmax], uc[lmax], c[lmax], a[lmax], h, ha;

void add(int x)
{
	if (!ua[x] && !uc[x])
		{	
			if (uc[v[x]])			
			{
				h++;
				c[h]=x;
				uc[x]=1;
			} else
			{
				ha++;
				a[ha]=x;
				ua[x]=1;
			}
		}
}

int main()
{
	freopen("castel.in","r",stdin);
	freopen("castel.out","w",stdout);
	scanf("%d %d %d",&n,&m,&k);
	int i, j, x;
	for (i=1; i<=n*m; i++) scanf("%d",&v[i]);
	h=1;
	c[1]=k;
	uc[k]=1;
	uc[v[k]]=1;
	for (i=1; i<=h; i++)
	{
		x=c[i]-1;
		if (c[i]%m!=1) add(x);
		x=c[i]+1;
		if (c[i]%m) add(x);
		x=c[i]-m;
		if (x>0) add(x);
		x=c[i]+m;
		if (x<=n*m) add(x);
		if (i==h)
		{
			for (j=1; j<=ha; j++)
			{
				if (uc[v[a[j]]])
				{
					h++;
					c[h]=a[j];
					ua[a[j]]=0;
					uc[a[j]]=1;
					a[j]=0;
				}
			}
		}
	}
	printf("%d",h);
}