Mai intai trebuie sa te autentifici.

Cod sursa(job #293553)

Utilizator DraStiKDragos Oprica DraStiK Data 1 aprilie 2009 21:51:52
Problema Castel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#define DIM 155
int a[DIM*DIM],lst[DIM][DIM],c[DIM*DIM],u[DIM*DIM];
int n,m,k,nrt=1;
void read ()
{
    int i,j;
    scanf ("%d%d%d",&n,&m,&k);
	for (i=0; i<=n; ++i)
        for (j=1; j<=m; ++j)
            scanf ("%d",&a[m*i+j]);
}
void solve ()
{
    int dc[4]={-1,1,-m,m};
    int in=1,sf=1,i,t;
	c[in]=k; u[k]=1;
    for (i=0; i<4; ++i)
        if (a[k+dc[i]]==k)
        lst[k][++lst[k][0]]=k+dc[i];
    while (in<=sf)
    {
        t=c[in++];
        for (i=1; i<=lst[t][0]; ++i)
            if (!u[lst[t][i]])
            {
                ++nrt;
                u[lst[t][i]]=1;
                c[++sf]=lst[t][i];
            }
		for (i=0; i<4; ++i)
			if (t+dc[i]>0 && t+dc[i]<=n*m)
				if (!u[t+dc[i]])
					if (u[a[t+dc[i]]])
					{
						++nrt;
						u[t+dc[i]]=1;
						c[++sf]=t+dc[i];
					}
    }
    printf ("%d",nrt);
}
int main ()
{
    freopen ("castel.in","r",stdin);
    freopen ("castel.out","w",stdout);
    read ();
	solve ();
	return 0;
}