Pagini recente » Cod sursa (job #53155) | Cod sursa (job #1012001) | Cod sursa (job #2523913) | Cod sursa (job #2973544) | Cod sursa (job #1164692)
#include <cstdio>
#include <queue>
#define inside(x,y) (x>=1 && x<=n && y>=1 && y<=m)
#define room(x,y) ((x-1)*m+y)
using namespace std;
int n,m,k;
int keys[155][155];
bool akeys[23000];
bool viz[155][155];
int dx[]={-1, 0, 1, 0},
dy[]={ 0, 1, 0,-1};
struct POINT
{
int x,y;
};
queue<POINT> q;
inline void roomn(int x,int *i,int *j)
{
*i=x/m+1;
*j=x%m;
if(*j==0)
{
(*i)--;
*j=m;
}
}
void solve()
{
POINT tata,fiu;
roomn(k,&tata.x,&tata.y);
akeys[k]=true;
q.push(tata);
int l;
while(!q.empty())
{
tata=q.front();
q.pop();
for(l=0;l<4;++l)
{
fiu.x=tata.x+dx[l];
fiu.y=tata.y+dy[l];
if(!inside(fiu.x,fiu.y))
continue;
if(viz[fiu.x][fiu.y])
continue;
if(akeys[keys[fiu.x][fiu.y]])
{
akeys[room(fiu.x,fiu.y)]=true;
viz[fiu.x][fiu.y]=true;
}
if(akeys[room(tata.x,tata.y)])
q.push(fiu);
}
}
}
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
int i,j;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
scanf("%d",&keys[i][j]);
solve();
int x=0;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
x+=viz[i][j];
printf("%d",x);
return 0;
}