Mai intai trebuie sa te autentifici.
Cod sursa(job #102911)
Utilizator | Data | 14 noiembrie 2007 19:42:02 | |
---|---|---|---|
Problema | Car | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.76 kb |
#include<stdio.h>
FILE *f=fopen("car.in","r"),
*g=fopen("car.out","w");
int a[501][501],i,j,n,m,dx[8]={-1,-1,-1,0,0,1,1,1},dy[8]={-1,0,1,-1,1,-1,0,1},ix,iy,fx,fy,k,min=2501;
void mer(int x,int y)
{ if(a[x][y]==0) { a[x][y]=--k;
if(x==fx&&y==fy) if(-k<min) min=-k;
else --k,a[x][y]=0;
else if(-k<min){ for(i=0;i<8;++i) mer(x+dx[i],y+dy[i]);
a[x][y]=0;
++k;
}
}
}
int main()
{ fscanf(f,"%d %d",&n,&m);
fscanf(f,"%d %d %d %d",&ix,&iy,&fx,&fy);
for(i=1;i<=n;++i) for(j=1;j<=m;++j) fscanf(f,"%d",&a[i][j]);
for(i=0;i<=m+1;++i) a[0][i]=a[n+1][i]=1;
for(i=0;i<=n+1;++i) a[i][0]=a[i][m+1]=1;
mer(ix,iy);
if(min<2501) fprintf(g,"%d\n",min);
else fprintf(g,"-1\n");
fclose(f);
fclose(g);
return 0;
}