hdu 1072 Nightmare (广搜)

// Time 0ms, Memory 356K
#include<iostream>

#include<cstdio>

#include<queue>

using namespace std;

int n,m,p[9][9],sx,sy,dx[]={0,1,0,-1},dy[]={1,0,-1,0};

struct point

{

    int x,y,time,step;

    point(int x=0,int y=0,int time=0,int step=0):x(x),y(y),time(time),step(step){}

};

int bfs()

{

    point s(sx,sy,6,0),t;

    queue<point>q;

    int nx,ny,i;

    q.push(s);

    while(!q.empty())

    {

        s=q.front();q.pop();

        for(i=0;i<4;i++)

        {

            nx=s.x+dx[i];ny=s.y+dy[i];

            t=point(nx,ny,s.time-1,s.step+1);

            if(t.x<0 || t.x>=n || t.y<0 || t.y>=m || !p[nx][ny] || t.time==0) continue;

            if(p[nx][ny]==3) return t.step;

            if(p[nx][ny]==4)

            {

                t.time=6;p[nx][ny]=0;

            }

            q.push(t);

        }

    }

    return -1;

}

int main()

{

    int i,j,c;

    cin>>c;

    while(c--)

    {

        scanf("%d%d",&n,&m);

        for(i=0;i<n;i++)

        {

            for(j=0;j<m;j++)

            {

                scanf("%d",&p[i][j]);

                if(p[i][j]==2)

                {

                    sx=i;sy=j;p[i][j]=0;

                }

            }

        }

        printf("%d\n",bfs());

    }

    return 0;

}


你可能感兴趣的:(HDU)