Cod sursa(job #254340)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 7 februarie 2009 11:21:23
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.02 kb
#include<stdio.h>
#define DIM 51
struct coada {int x,y;} c[DIM*DIM];
int dx[4]={-1,0,1, 0};
int dy[4]={ 0,1,0,-1};
int a[DIM][DIM],b[DIM][DIM];
int n,m,x1,y1,x2,y2,k2,x,y,k;
int main ()
{
    freopen("kdrum.in","r",stdin);
    freopen("kdrum.out","w",stdout);
    int i,j;
    scanf("%d%d%d%d%d%d%d",&n,&m,&k2,&x1,&y1,&x2,&y2);
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
        {
            scanf("%d",&b[i][j]);
            if(b[i][j]==0)
            a[i][j]=-1;
            else
            a[i][j]=0;
        }
    for (i=1; i<=n; ++i)
		a[i][0]=a[i][n+1]=a[0][i]=a[n+1][i]=-1;
    int in=1,sf=1;
    c[in].x=x1;
    c[in].y=y1;
    while (in<=sf)
    {
        x=c[in].x;
        y=c[in].y;   
        for (k=0; k<4; ++k)   
            if (a[x+dx[k]][y+dy[k]]==0)
            {
                a[x+dx[k]][y+dy[k]]=a[x][y]+1;
                ++sf;
                c[sf].x=x+dx[k];
                c[sf].y=y+dy[k];
            }
        in++;
    }
    printf("%d",++a[x2][y2]);
return 0;
}