Cod sursa(job #117953)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 22 decembrie 2007 20:31:43
Problema Car Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include<stdio.h>
#include<stdlib.h>
long int n,m,a[503][503],si,sj,fi,fj,i,j,ih[20],jh[20],dh[20],ch[20],
lh,i1,j1,d1,c1,i2,j2,d2,c2,
pr[8][8],sol,di[8],dj[8],dest[8][5],cost[8][5],fil[503][503];
void fill(long int ii,long int jj);
int main()
{
	for(i=0;i<=6;i++)for(j=i+1;j<=7;j++){ pr[i][j]=j-i;if(pr[i][j]>4)pr[i][j]=8-pr[i][j];pr[j][i]=pr[i][j];}
	di[0]=-1;di[1]=-1;di[2]= 0;di[3]= 1;di[4]= 1;di[5]=-1;di[6]= 0;di[7]=-1;
	dj[0]= 0;dj[1]= 1;dj[2]= 1;dj[3]= 1;dj[4]= 0;dj[5]= 1;dj[6]=-1;dj[7]=-1;
	for(i=0;i<=7;i++)
	{ dest[i][0]=i;cost[i][0]=0;
	  dest[i][1]=i+1;if(dest[i][1]>=8)dest[i][1]-=8;cost[i][1]=1;
	  dest[i][2]=i-1;if(dest[i][2]<0)dest[i][2]+=8;cost[i][2]=1;
	  dest[i][3]=i+2;if(dest[i][3]>=8)dest[i][3]-=8;cost[i][3]=2;
	  dest[i][4]=i-2;if(dest[i][4]<0)dest[i][4]+=8;cost[i][4]=2;
	}
	FILE *f,*g;f=fopen("car.in","r");g=fopen("car.out","w");
	fscanf(f,"%ld%ld",&n,&m);
	fscanf(f,"%ld%ld",&si,&sj);
	fscanf(f,"%ld%ld",&fi,&fj);
	for(i=1;i<=n;i++)
	  for(j=1;j<=m;j++)
	   fscanf(f,"%ld",&a[i][j]);
	for(i=0;i<=n+1;i++)
	 {a[i][0]=1;a[i][m+1]=1;}
	for(j=0;j<=m+1;j++)
	 {a[0][j]=1;a[n+1][j]=1;}
	fill(si,sj);
	if(!fil[fi][fj]){fprintf(g,"-1\n");fcloseall();return 0;}
	for(i=1;i<=8;i++)
	{ ih[i]=si;jh[i]=sj;dh[i]=i-1;ch[i]=0;}
	lh=8;
	//while(ih[1]!=fi||jh[1]!=fj)
	//{       i1=ih[1];j1=jh[1];d1=dh[1];c1=ch[1];}

		fprintf(g,"%ld\n",sol);
	fcloseall();
	return 0;
}
void fill(long int ii,long int jj)
{   if(a[ii][jj])return;
    if(fil[ii][jj])return;
    fil[ii][jj]=1;
    if(fil[fi][fj])return;
    fill(ii-1,jj-1);
    if(fil[fi][fj])return;
    fill(ii-1,jj);
    if(fil[fi][fj])return;
    fill(ii-1,jj+1);
    if(fil[fi][fj])return;
    fill(ii,jj-1);
    if(fil[fi][fj])return;
    fill(ii,jj+1);
    if(fil[fi][fj])return;
    fill(ii+1,jj-1);
    if(fil[fi][fj])return;
    fill(ii+1,jj);
    if(fil[fi][fj])return;
    fill(ii+1,jj+1);
}