hdoj 1072 Nightmare 广搜

来源:互联网 发布:淘宝店运营商靠谱吗 编辑:程序博客网 时间:2024/05/15 10:38

Nightmare(题目链接)

#include<istream>#include<algorithm>#include<queue>#include<cstdio>using namespace std;int t,n,m;int mat[10][10];int dir[4][2]={0,1,0,-1,1,0,-1,0};struct Node{    int x,y,ans,time;}s,t1,t2;void bfs()     //广搜{    queue<Node>q;    q.push(s);    while(!q.empty())    {        t1=q.front();        q.pop();        for(int i=0;i<4;i++)       //走啊走 四处转悠        {            t2.x=t1.x+dir[i][0];            t2.y=t1.y+dir[i][1];            t2.ans=t1.ans+1;            t2.time=t1.time-1;            if(t2.x>=0&&t2.x<n&&t2.y>=0&&t2.y<m&&mat[t2.x][t2.y]!=0&&t2.time>0)   //不越界  地图值不为零  时间还有剩余            {                if(mat[t2.x][t2.y]==3)         //结束                {                    printf("%d\n",t2.ans);                    return ;                }                if(mat[t2.x][t2.y]==4)         //重置时间                {                    t2.time=6;                    mat[t2.x][t2.y]=0;                }                q.push(t2);            }        }    }    printf("-1\n");      //没办法喽 输出-1 }int main(){    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)            {                scanf("%d",&mat[i][j]);                if(mat[i][j]==2)                {                    s.x=i;                    s.y=j;                    s.time=6;                    s.ans=0;                }            }        }        bfs();    }    return 0;}