Pagini recente » Cod sursa (job #481470) | Cod sursa (job #2399652) | Cod sursa (job #2028963) | Cod sursa (job #2694045) | Cod sursa (job #55176)
Cod sursa(job #55176)
#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;
ll=l;
for(i=1;i<=ll;i++)
if(mark[x[i]])
if(mark[a[y[i]]])
{ mark[y[i]]=1;p=y[i];
sol++;
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;}}
x[i]=x[l];y[i]=y[l];x[l]=0;y[l]=0;l--;
}
}while(ok);
fprintf(g,"%ld\n",sol);
fcloseall();
return 0;
}