Pagini recente » Cod sursa (job #1754919) | Cod sursa (job #2398650) | Cod sursa (job #2646106) | Cod sursa (job #124661) | Cod sursa (job #2097973)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("castel.in");
ofstream g ("castel.out");
const int nmax=153;
int n,m,k,v[nmax][nmax],x,y,cx,cy,dx[]={-1,0,1,0},dy[]={0,1,0,-1},viz[nmax][nmax],am[nmax*nmax],t,ok,usu,sol;
queue <int> qx,qy;
bool inside(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m;
}
int main()
{
f>>n>>m>>k;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) f>>v[i][j];
}
x=k/m+1;
y=k%m;
if(!y)
{
y=m;
--x;
}
viz[x][y]=1;
for(int i=0;i<4;++i)
{
cx=x+dx[i];
cy=y+dy[i];
if(inside(cx,cy))
{
qx.push(cx);
qy.push(cy);
}
}
am[k]=1;
while(true)
{
ok=0;
t=qx.size();
for(int i=1;i<=t;++i)
{
x=qx.front();
y=qy.front();
qx.pop();
qy.pop();
if(!am[v[x][y]])
{
qx.push(x);
qy.push(y);
continue;
}
am[(x-1)*m+y]=1;
viz[x][y]=1;
for(int i=0;i<4;++i)
{
cx=x+dx[i];
cy=y+dy[i];
if(!inside(cx,cy)||viz[cx][cy]) continue;
if(!viz[cx][cy])
{
ok=1;
qx.push(cx);
qy.push(cy);
}
}
}
if(!ok) break;
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) if(viz[i][j]) ++sol;
}
g<<sol;
return 0;
}