冰球

#include<stdio.h>     
int map[99][99];
int mov1[4]={1,0,-1,0};
int mov2[4]={0,-1,0,1};
int sx;
int sy;
int ex;
int ey;
int X;
int Y;
int min;
void milu(int x,int y,int step)
{
    if(step>min)
        return;
    if(step==10)
        return;
    for(int i=0;i<4;i++)
    {
        int nx=x+mov1[i];
        int ny=y+mov2[i];
        if(map[nx][ny]==1)
            continue;
        int flagg=0;
        while(map[nx][ny]==0)
        {
            nx+=mov1[i];
            ny+=mov2[i];
            if(nx<0||nx>=X||ny<0||ny>=Y)
            {
                flagg=1;
                break;
            }

        }
        if(flagg==1)
            continue;
        if(map[nx][ny]==3)
        {
            if(min>step)
                min=step;
            return ;
        }
        else if(map[nx][ny]==1)
        {
            map[nx][ny]=0;
        }
        milu(nx-mov1[i],ny-mov2[i],step+1);
        if(map[nx][ny]==0)
            map[nx][ny]=1;

    }
}
int main()
{
    //freopen("in.txt","r",stdin);
    while(scanf("%d%d",&Y,&X))
    {
        min=999;
        if(Y==0&&X==0)
            break;
        for(int i=0;i<X;i++)
        {
            for(int j=0;j<Y;j++)
            {
                scanf("%d",&map[i][j]);
                if(map[i][j]==2)
                {
                    sx=i;
                    sy=j;
                    map[i][j]=0;
                }
            }
        }
        milu(sx,sy,0);
        if(min==999)
            printf("-1\n");
        else
            printf("%d\n",min+1);
    }
    return 0;
}

 

posted on 2017-01-25 10:28  霸王程  阅读(91)  评论(0编辑  收藏  举报