现在的位置: 首页 > 综合 > 正文

hdu 1072 Nightmare (广搜)

2013年08月18日 ⁄ 综合 ⁄ 共 758字 ⁄ 字号 评论关闭
// 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;
}

【上篇】
【下篇】

抱歉!评论已关闭.