Pagini recente » Cod sursa (job #2621903) | Cod sursa (job #2249434) | Cod sursa (job #2572163) | Cod sursa (job #3256416) | Cod sursa (job #519300)
Cod sursa(job #519300)
#include <stdio.h>
int n, m, k, i, j, inc, sf, cam;
int co[22503], ad[5], ac[22503][150], nev[22503];
bool viz[22503];
void initializare()
{
ad[1]=-m; ad[2]=-1; ad[3]=1; ad[4]=m;
}
void citire()
{
scanf("%ld %ld %d",&n,&m,&k);
initializare();
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
scanf("%ld",&nev[(i-1)*m+j]);
}
void rezolvare()
{
co[1]=k;
viz[k]=true;
inc=1;
sf=1;
while (inc<=sf)
{
cam=co[inc]; inc++;
for (i=1;i<=ac[cam][0];i++)
if (viz[ac[cam][i]]==false)
{
viz[ac[cam][i]]=true;
sf++; co[sf]=ac[cam][i];
}
for (i=1;i<=4;i++)
if ((cam+ad[i]>0) and (cam+ad[i]<=n*m) and ((cam%m>0) or (i!=3)) and ((cam%m!=1) or (i!=2)))
if ((viz[nev[cam+ad[i]]]==true) and (viz[cam+ad[i]]==false))
{
sf++;
co[sf]=cam+ad[i];
viz[cam+ad[i]]=true;
}
else
{
ac[nev[cam+ad[i]]][0]++;
ac[nev[cam+ad[i]]][ac[nev[cam+ad[i]]][0]]=cam+ad[i];
}
}
printf("%ld",sf);
}
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
citire();
rezolvare();
return 0;
}