Cod sursa(job #254598)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 7 februarie 2009 13:09:41
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.09 kb
#include<stdio.h>
#include<stdlib.h>
#define Nmax 51

int n,m,k,a[Nmax][Nmax],b[Nmax][Nmax];
int pi,pf,xi,xf;
const int dx[]={0,0,1,-1},
          dy[]={1,-1,0,0};

void lee()
{
    int x[Nmax*Nmax],y[Nmax*Nmax],i,j,ii,jj,li,lf=1;
    x[1]=pi;
    y[1]=pf;
    a[pi][pf]=1;
    for(li=1;li<=lf;li++)
     {
      i=x[li];
      j=y[li];
      for(int k=0;k<8;k++)
       {
        ii=dx[k]+i;
        jj=dy[k]+j;
        if(ii<1||ii>n) continue;
        if(jj<1||jj>m) continue;
        if(a[ii][jj]==-1||a[ii][jj]>0) continue;
        x[++lf]=ii;
        y[lf]=jj;
        a[ii][jj]=a[i][j]+1;
        if(ii==xi&&jj==xf)
         {
          printf("%d\n",a[ii][jj]);
          exit(0);
         }
       }

     }
}

int main()
{
    freopen("kdrum.in","r",stdin);
    freopen("kdrum.out","w",stdout);
    scanf("%d %d %d",&n,&m,&k);
    scanf("%d %d %d %d",&pi,&pf,&xi,&xf);
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      {scanf("%d",&b[i][j]);
       if(b[i][j]==0)
         a[i][j]=-1;
      }
    lee();
    printf("-1\n");
    return 0;
}