hdu 1072Nightmare(bfs)

来源:互联网 发布:大数据平台开发工程师 编辑:程序博客网 时间:2024/05/22 05:22

炸弹时间为6

0是不可走

1可走

2是起始位置

3是重点

4重置炸弹时间为6

#include <stdio.h>#include <string.h>#include <queue>using namespace std;int n,m,sx,sy;int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int maze[10][10];struct node{    int x,y,step,time;}pre,rear;int isok(int x,int y){    if(x>0&&x<=n&&y>0&&y<=m&&maze[x][y]!=0)        return 1;    return 0;}void bfs(){    queue<node>Q;    int i;    pre.x=sx,pre.y=sy;    pre.step=0,pre.time=6;    Q.push(pre);    maze[sx][sy]=0;    while(!Q.empty())    {        pre=Q.front();        Q.pop();        for(i=0; i<4; i++)        {            rear=pre;            rear.x+=dir[i][0];            rear.y+=dir[i][1];            if(isok(rear.x,rear.y))            {                if(maze[rear.x][rear.y]==1)                {                    rear.time--;                    if(rear.time>0)                    {                        rear.step++;                        Q.push(rear);                    }                }                if(maze[rear.x][rear.y]==4)                {                    rear.time--;                    if(rear.time>0)                    {                        rear.step++;                        rear.time=6;                        Q.push(rear);                    }                    maze[rear.x][rear.y]=0;                }                if(maze[rear.x][rear.y]==3)                {                    rear.time--;                    if(rear.time>0)                    {                        rear.step++;                        printf("%d\n",rear.step);                        return;                    }                }            }        }    }    printf("-1\n");    return;}int main(){    int t,i,j;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        for(i=1;i<=n;i++)            for(j=1;j<=m;j++)        {            scanf("%d",&maze[i][j]);            if(maze[i][j]==2)                sx=i,sy=j;        }        bfs();    }    return 0;}


0 0