Pagini recente » Cod sursa (job #289279) | Cod sursa (job #1049907) | Cod sursa (job #1524452) | Cod sursa (job #1909756) | Cod sursa (job #953184)
Cod sursa(job #953184)
#include<fstream>
#include<vector>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
int n,m,i,j,p,u,d,k,xx,yy,x,xp,y,nrc,a[155][155],q[155*155],v[155*155],viz[155][155];
vector<int>kl[155*155];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int ein(int x,int y)
{
if(x<0||y<0||x>=n||y>=m)
return 0;
return 1;
}
int main()
{
f>>n>>m>>k;
for(i=0;i<n;++i)
for(j=0;j<m;++j)
{
f>>a[i][j];
--a[i][j];
}
--k;
q[1]=k;
p=u=1;
viz[k/m][k%m]=1;
while(p<=u)
{
x=q[p];
++p;
v[x]=1;
++nrc;
for(i=0;i<kl[x].size();++i)
if(!viz[kl[x][i]/m][kl[x][i]%m])
{
++u;
q[u]=kl[x][i];
viz[kl[x][i]/m][kl[x][i]%m]=1;
}
xp=x;
x=x/m;
y=xp%m;
for(d=0;d<=3;++d)
{
xx=x+dx[d];
yy=y+dy[d];
if(!ein(xx,yy)||viz[xx][yy])
continue;
if(v[a[xx][yy]])
{
++u;
q[u]=xx*m+yy;
viz[xx][yy]=1;
}
else
kl[a[xx][yy]].push_back(xx*m+yy);
}
}
g<<nrc<<'\n';
return 0;
}