Pagini recente » Cod sursa (job #2570906) | Cod sursa (job #2207600) | Clasament 10din10 | Cod sursa (job #589418) | Cod sursa (job #1602640)
#include <iostream>
#include <fstream>
#define nmax 160
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
int n,m;
int a[nmax][nmax];
int viz[nmax][nmax];
int uz[nmax][nmax];
int qx[nmax*nmax],qy[nmax*nmax];
int dx[]={0,1,0,-1},dy[]={-1,0,1,0};
void conv(int val,int &x,int &y)
{x=(val-1)/m + 1;
y=(val-1)%m + 1;
}
int main()
{int start,sx,sy,i,j;
fin>>n>>m;
fin>>start;
conv(start,sx,sy);
viz[sx][sy]=1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fin>>a[i][j];
for(i=0;i<=n+1;i++)
uz[i][0]=uz[m+1][0]=1;
for(j=0;j<=m+1;j++)
uz[0][i]=uz[0][n+1]=1;
int k,in,sf,pux,puy,ajx,ajy,px,py,rezultat=1,ok=1;
viz[sx][sy]=1;
while(ok)
{in=sf=0;
ok=0;
qx[in]=sx;
qy[in]=sy;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)uz[i][j]=0;
uz[sx][sy]=1;
while(in<=sf)
{pux=qx[in];puy=qy[in++];
for(k=0;k<4;k++)
{px=pux+dx[k];py=puy+dy[k];
if(!uz[px][py])
{conv(a[px][py],ajx,ajy);
if(viz[ajx][ajy])
{uz[px][py]=1;
if(!viz[px][py]){viz[px][py]=1;ok=1;rezultat++;
}
qx[++sf]=px;
qy[sf]=py;
}
}
}
}
}
fout<<rezultat;
}