Pagini recente » Borderou de evaluare (job #3200324) | Cod sursa (job #720160)
Cod sursa(job #720160)
#include<stdio.h>
#include<queue>
using namespace std;
struct nod{
long i;
long j;
};
queue<nod> q;
long ch[25001],viz[160][160],a[160][160],i,j,n,m,k,ok,z,nrc,d1[4],d2[4];
nod pas,pasa,p[25001];
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%ld %ld %ld",&n,&m,&k);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%ld",&a[i][j]);
d1[0]=1; d1[2]=-1; d2[1]=1; d2[3]=-1;
if(k%m==0)
{
pas.i=k/m;
pas.j=m;
}
else
{
pas.i=k/m +1;
pas.j=(k-(pas.i-1)*m) % m;
}
ch[a[pas.i][pas.j]]=1;
viz[pas.i][pas.j]=1;
q.push(pas);
nrc=1;
ok=1;
while(ok!=0)
{
ok=0; z=0;
while(!q.empty())
{
pas=q.front();
for(i=0;i<=3;i++)
if(ch[a[pas.i+d1[i]][pas.j+d2[i]]]==1 && viz[pas.i+d1[i]][pas.j+d2[i]]==0)
{
viz[pas.i+d1[i]][pas.j+d2[i]]=1;
ch[m*(pas.i+d1[i]-1)+pas.j+d2[i]]=1;
pasa.i=pas.i+d1[i];
pasa.j=pas.j+d2[i];
nrc++;
ok=1;
q.push(pasa);
}
q.pop();
z++;
p[z]=pas;
}
for(i=1;i<=z;i++)
q.push(p[i]);
}
printf("%ld\n",nrc);
return 0;
}