Cod sursa(job #55346)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 27 aprilie 2007 06:22:41
Problema Castel Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#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]);
       	do
	{
	   ok=0;
	   for(i=1;i<=l;i++)
	    { if(mark[y[i]]) { x[i]=x[l];x[l]=0;y[i]=y[l];y[l]=0;l--;ok=1;}
	      else if(mark[x[i]])
		    if(mark[a[y[i]]])
		    { mark[y[i]]=1;p=y[i];x[i]=x[l];x[l]=0;y[i]=y[l];y[l]=0;
		      l--;sol++;
		      if(p-n>0){l++;x[l]=p;y[l]=p-n;ok=1;}
		      if(p+n<=t){l++;x[l]=p;y[l]=p+n;ok=1;}
		      if(p%n!=1){l++;x[l]=p;y[l]=p-1;ok=1;}
		      if(p%n){l++;x[l]=p;y[l]=p+1;ok=1;}
		    }
	      }
	 }while(ok);
	 fprintf(g,"%ld\n",sol);
	 fcloseall();
	 return 0;
}