Pagini recente » Cod sursa (job #1999700) | Cod sursa (job #1614110) | Cod sursa (job #2307182) | Cod sursa (job #1645190) | Cod sursa (job #1968487)
#include <iostream>
#include <deque>
#include <fstream>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define pf push_front
#define pp pop_front
using namespace std;
ifstream in("castel.in");
ofstream out("castel.out");
int dx[]={-1,0,1,0},dy[]={0,-1,0,1};
int cam,n,m,viz[155][155],c[300000],a[155][155],ii,jj,cm[155][155],sem,st;
deque <pair<int,int> > dq;
pair<int,int> fr,init;
int ok(int i,int j)
{
return(i>0 && i<=n && j>0 && j<=m);
}
int main()
{
in>>n>>m>>st;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)in>>a[i][j];
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
cm[i][j]=++cam;
if(st==cam)
{
dq.pf(mp(i,j));
viz[i][j]=1;
c[cam]=1;
}
}
///bine
cam=0;
while(!dq.empty() && sem!=2)
{
fr=dq.front();
dq.pp();
if(c[a[fr.x][fr.y]])
{
c[cm[fr.x][fr.y]]=1;
sem=0;
++cam;
for(int d=0;d<4;++d)
{
ii=fr.x+dx[d];
jj=fr.y+dy[d];
if(ok(ii,jj) && viz[ii][jj]==0)
{
viz[ii][jj]=1;
if(c[a[ii][jj]])
{
dq.pf(mp(ii,jj));
}
else dq.pb(mp(ii,jj));
}
}
}
else
{
dq.pb(fr);
if(sem==0)
{
init=fr;
sem=1;
}
else if(fr==init && sem==1)sem=2;
}
}
out<<cam;
return 0;
}