Pagini recente » Cod sursa (job #1260876) | Cod sursa (job #1246952) | Cod sursa (job #2843460) | Cod sursa (job #986556) | Cod sursa (job #930131)
Cod sursa(job #930131)
#include<cstdio>
#include<vector>
#define NMax 155
using namespace std;
int viz[NMax*NMax];
int m,n,ch[NMax][NMax];
int px[]={0,0,1,-1}, py[]={1,-1,0,0};
vector<int> acc;
int coord_x (int nr)
{
return (nr-1)/n+1;
}
int coord_y (int nr)
{
return (nr-1)%n+1;
}
int numar (int x, int y)
{
return (x-1)*n+y;
}
int check (int x, int y)
{
if (x<1 || x>m)
return 0;
if (y<1 || y>n)
return 0;
return 1;
}
int main ()
{
int k,i,j,cx,cy,x,y,ok,lg,cont=0,dir;
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%d%d%d",&m,&n,&k);
acc.push_back(k);
viz[k]=1;
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
scanf("%d",&ch[i][j]);
ok=1;
while (ok)
{
ok=0;
lg=acc.size();
for (i=0; i<lg; i++)
{
cx=coord_x(acc[i]);
cy=coord_y(acc[i]);
for (dir=0; dir<4; dir++)
if (check(cx+px[dir],cy+py[dir]))
{
x=cx+px[dir], y=cy+py[dir];
if (!viz[numar(x,y)] && viz[ch[x][y]])
viz[numar(x,y)]=1, ok=1, acc.push_back(numar(x,y));
}
}
}
for (i=1; i<=m*n; i++)
if (viz[i])
cont++;
printf("%d\n",cont);
return 0;
}