Cod sursa(job #462280)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 10 iunie 2010 11:58:53
Problema Car Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream.h>
int v[507][507],min[8][507][507],car[507*507*8];
int sx,sy,fx,fy,q,sf,s=0;
int dir[8][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
void add(int sx,int sy,int d,int ct)
{int i,j;
for(i=sx,j=sy;!v[i][j];i+=dir[d][0],j+=dir[d][1])
  if(!min[d][i][j])
   {min[d][i][j]=ct;
   car[++sf]=(((i<<9)+j)<<3)+d;
   if(i==fx&&j==fy)
	s=ct;}}
int main ()
{int i,j,d,n,m;
ifstream Q("car.in");
ofstream w("car.out");
Q>>n>>m>>sx>>sy>>fx>>fy;
for(i=0;i<=n+1;++i)
  for(j=0;j<=m+1;++j)
	v[i][j]=1;
for(i=1;i<=n;++i)
  for(j=1;j<=m;++j)
    q>>v[i][j];
for(sf=-1,i=0;i<8;++i)
  add(sx,sy,i,1);
for(q=0;(q<=sf)&&(!s);++q)
  {i=car[q]>>12;
  j=(car[q]&4090)>>3;
  d=car[q]&7;
  add(i,j,(d+1)%8,min[d][i][j]+1);
  add(i,j,(d+8-1)%8,min[d][i][j]+1);}
s--;
w<<s<<"\n";
return 0;}