Pagini recente » Cod sursa (job #1316791) | Cod sursa (job #1087349) | Cod sursa (job #1405649) | Cod sursa (job #953186) | Cod sursa (job #1634571)
#include <fstream>
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
short n,m,i,j,k;
short a[155][155];
short vizitate[155][155],nrcamere;
bool liber[155][155];
short dx[]= {0,-1,0,1};
short dy[]= {-1,0,1,0};
short chei[22500],nrchei;
int interior(int x,int y)
{
if (x>=1&&x<=n&&y>=1&&y<=m)
return 1;
return 0;
}
void bkt(int x,int y,int cheie)
{
liber[x][y]=1;
if (vizitate[x][y]==0) vizitate[x][y]=1,nrcamere++;
short z;
int k=(x-1)*m+y;
int ok=1;
for (z=1; z<=nrchei; z++) if (chei[z]==k) ok=0;
if (ok) chei[++nrchei]=k;
for (k=0; k<4; k++)
if (interior(x+dx[k],y+dy[k])&&liber[x+dx[k]][y+dy[k]]==0)
if (a[x+dx[k]][y+dy[k]]==cheie||vizitate[x+dx[k]][y+dy[k]]) bkt(x+dx[k],y+dy[k],cheie);
liber[x][y]=0;
}
int main()
{
fin>>n>>m>>k;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
fin>>a[i][j];
int xi=(k-k%m)/m+1;
int yi=k%m;
chei[++nrchei]=a[xi][yi];
int terminat=0;
int nr=0;
while (!terminat)
{
short aux=nrcamere;
for (i=1; i<=nrchei; i++)
bkt(xi,yi,chei[i]);
if (aux==nrcamere) terminat=1;
}
fout<<nrcamere<<'\n';
}