Pagini recente » Istoria paginii utilizator/anaa_i | Istoria paginii utilizator/tttt | Istoria paginii utilizator/vladd12 | bruh | Cod sursa (job #1154278)
#include <cstdio>
#include <queue>
using namespace std;
queue <int>c[22503];
int x[30001],y[30001],chei[30000],trec[30000];
int main()
{
int n,m,ok,nr,op,sum,i,j;
FILE *f=fopen("castel.in","r");
FILE *g=fopen("castel.out","w");
fscanf(f,"%d%d%d",&n,&m,&op);
for(i=1; i<=n*m; ++i)
fscanf(f,"%d",&x[i]);
chei[1]=op;
int kap,k[4];
k[1]=1;
k[2]=m;
k[3]=-1;
k[0]=m*(-1);
trec[op]=1;
for(kap=0; kap<=3; ++kap)
{
if((op+k[kap])>=1&&(op+k[kap])<=n*m&&((op+k[kap])%m!=1||kap!=3)&&((op+k[kap])%m!=0||kap!=1))
{
c[x[op+k[kap]]].push(op+k[kap]);
trec[op+k[kap]]=1;
}
}
int nchei=1;
int a;
ok=0;
while(ok==0)
{
ok=1;
for(i=1; i<=nchei; ++i)
{
while(!c[chei[i]].empty())
{
ok=0;
a=c[chei[i]].front();
++nchei;
chei[nchei]=a;
for(kap=0; kap<=3; ++kap)
{
if( (a+k[kap])>0 && (a+k[kap])<=n*m && ((a+k[kap])%m!=1||kap!=3) && ((a+k[kap])%m!=0||kap!=1) && (trec[a+k[kap]]!=1) )
{c[x[a+k[kap]]].push(a+k[kap]);
trec[a+k[kap]]=1;}
}
c[chei[i]].pop();
}
}
}
fprintf(g,"%d\n",nchei);
return 0;
}