Pagini recente » Cod sursa (job #1216722) | Cod sursa (job #236060) | Cod sursa (job #3128410) | Cod sursa (job #238010) | Cod sursa (job #2718721)
#include <bits/stdc++.h>
#define dim 152
using namespace std;
ifstream fin ("castel.in");
ofstream fout("castel.out");
struct el
{
int x,y;
}necesar[dim][dim],coada[dim*dim+1];;
vector<el> lista[dim][dim];
int n,m,dx[]= {0,-1,0,1},dy[]= {-1,0,1,0};
bool viz[dim][dim],key[dim][dim];
void lee (int xi,int yi)
{
viz[xi][yi]=1;
key[xi][yi]=1;
int p=1,u=1;
coada[1].x=xi,coada[1].y=yi;
while (p<=u)
{
int xx=coada[p].x,yy=coada[p].y;
for (int j=0;j<lista[xx][yy].size();j++)
if (viz[lista[xx][yy][j].x][lista[xx][yy][j].y]==0)
{
coada[++u].x=lista[xx][yy][j].x;
coada[u].y=lista[xx][yy][j].y;
viz[coada[u].x][coada[u].y]=1;
key[coada[u].x][coada[u].y]=1;
}
lista[xx][yy].clear();
for (int i=0;i<4;i++)
{
int xx=coada[p].x+dx[i],yy=coada[p].y+dy[i];
if (xx>0 && xx<=n && yy>0 && yy<=m&&viz[xx][yy]==0 && key[necesar[xx][yy].x][necesar[xx][yy].y]==1)
{
coada[++u].x=xx;
coada[u].y=yy;
viz[xx][yy]=1;
key[xx][yy]=1;
}
else if (xx>0 && xx<=n && yy>0 && yy<=m&&viz[xx][yy]==0)
lista[necesar[xx][yy].x][necesar[xx][yy].y].push_back({xx,yy});
}
++p;
}
}
int32_t main()
{
int i,j,k,cod,xi,yi,sol=0;
fin>>n>>m>>cod;
xi=cod/m;
if (cod%m!=0)
xi++;
yi=cod-(xi-1)*m;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
fin>>cod;
necesar[i][j].x=cod/m;
if (cod%m!=0)
necesar[i][j].x++;
necesar[i][j].y=cod-(necesar[i][j].x-1)*m;
}
lee(xi,yi);
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (viz[i][j]==1)
++sol;
fout<<sol<<'\n';
return 0;
}