Pagini recente » Cod sursa (job #2133267) | Cod sursa (job #2894289) | Cod sursa (job #1856530) | Cod sursa (job #1680039) | Cod sursa (job #55188)
Cod sursa(job #55188)
#include<stdio.h>
long int m,n,k,mark[22501],t,i,a[22501],l,ll,x[90005],y[90005],sol,soll,p,ok;
int main()
{
FILE *f,*g;
f=fopen("castel.in","r");
g=fopen("castel.out","w");
fscanf(f,"%ld%ld%ld",&m,&n,&k);
mark[k]=1;sol=1;
t=m*n;p=k;
if(p-n>0){l++;x[l]=p;y[l]=p-n;}
if(p+n<=t){l++;x[l]=p;y[l]=p+n;}
if(p%n!=1){l++;x[l]=p;y[l]=p-1;}
if(p%n){l++;x[l]=p;y[l]=p+1;}
for(i=1;i<=t;i++)
{ fscanf(f,"%ld",&a[i]);
/* if(i-n>0){l++;x[l]=i;y[l]=i-n;}
if(i+n<=t){l++;x[l]=i;y[l]=i+n;}
if((i%n)!=1){l++;x[l]=i;y[l]=i-1;}
if(i%n){l++;x[l]=i;y[l]=i+1;}
*/ }
do
{
ok=0;
i=1;
while(i<=l)
{ while(mark[x[i]]&&(!mark[y[i]])&&mark[a[y[i]]])
{p=y[i];
if(p-n>0) {if(!mark[p-n]){l++;x[l]=p;y[l]=p-n;ok=1;}}
if(p+n<=t) {if(!mark[p+n]){l++;x[l]=p;y[l]=p+n;ok=1;}}
if(p%n!=1) {if(!mark[p-1]){l++;x[l]=p;y[l]=p-1;ok=1;}}
if(p%n) {if(!mark[p+1]){l++;x[l]=p;y[l]=p+1;ok=1;}}
mark[p]=1;x[i]=x[l];y[i]=y[l];x[l]=0;y[l]=0;l--;
}
i++;
}
}while(ok);
fprintf(g,"%ld\n",sol);
fcloseall();
return 0;
}