Cod sursa(job #27008)

Utilizator rusRus Sergiu rus Data 5 martie 2007 23:32:42
Problema Car Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include<stdio.h>
#define dim 5002
#define INF 32000

struct tata{
            
            int lin,col;
	    }tata[dim][dim];
int a[dim][dim],ter[dim][dim];
int n,m;
int modificare,pas,ind=0;
int in,jn,nr=0;

const int di[]={-1,-1,0,1,1,1,0,-1};
const int dj[]={ 0,1,1,1,0,-1,-1,-1};

//const char D[]={"NESV"};

int ip,jp,is,js;
void citire();
void lee();
int bun();
void drum(int ,int );
void afisare();

int main()
{
    freopen("car.in","r",stdin);
    freopen("car.out","w",stdout);
    citire();
    lee();
    afisare();
    return 0;
}
void citire()
{
     scanf("%d %d",&n,&m);
     scanf("%d %d %d %d",&ip,&jp,&is,&js);
     int i,j;
     for(i=1;i<=n;i++)
     {
		      for(j=1;j<=m;j++)
		      {
				       scanf("%d",&ter[i][j]);
				       a[i][j]=INF;

		      }
     }
     
}
void lee()
{
     int i,j;

     a[ip][jp]=0;
     do
     {
	  modificare=0;
	  for(i=1;i<=n;i++)
	    for(j=1;j<=m;j++)
	      if(a[i][j]==pas)
		for(int dir=0;dir<8;dir++)
		{
			in=i+di[dir];
			jn=j+dj[dir];
			if(bun())
			{
				 a[in][jn]=pas+1;
				 tata[in][jn].lin=i;
				 tata[in][jn].col=j;
				 modificare=1;

			     //if(in==js && jn==js) return ;
			}
		       


		}
		pas++;
  }while(modificare);
}
int bun()
{
     if(ter[in][jn]==1) return 0;
     if(a[in][jn]!=INF) return 0;
     if(in<1 || in>n || jn<1 || jn>m) return 0 ;
     return 1;
}
void drum(int i,int j)
{

     int aux,aux1;
     if(i==0 || j==0) return ;

     drum(tata[i][j].lin,tata[i][j].col);
     if(i==ip && j==jp)
     return ;
     else

     printf("%d %d\n",i,j);

}
void afisare()
{
     int i,j;

    //(ind==0) printf("-1");
     //se

         if(a[is][js]==32000)
          printf("-1");
          else
		printf("%d\n",a[is][js]+1);


		//drum(is,js);
}