Pagini recente » Borderou de evaluare (job #725053) | Cod sursa (job #720015)
Cod sursa(job #720015)
#include<stdio.h>
#include<queue>
using namespace std;
struct nod{
long i;
long j;
};
queue<nod> q;
long ch[25001],viz[151][151],a[151][151],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;
pas.i=m%k+1;
pas.j=k/m+1;
ch[k]=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;
}