FZU 2196 Escape (两次BFS)

来源:互联网 发布:java项目使用tomcat 编辑:程序博客网 时间:2024/05/22 21:57

题目链接】:click here~~

题目大意】:

Description

小明进入地下迷宫寻找宝藏,找到宝藏后却发生地震,迷宫各处产生岩浆,小明急忙向出口处逃跑。如果丢下宝藏,小明就能迅速离开迷宫,但小明并不想轻易放弃自己的辛苦所得。所以他急忙联系当程序员的朋友你(当然是用手机联系),并告诉你他所面临的情况,希望你能告诉他是否能成功带着宝藏逃脱。

Input

有多组测试数据。

每组测试数据第一行是一个整数T,代表接下去的例子数。(0<=T<=10)

接下来是T组例子。

每组例子第一行是两个整数N和M。代表迷宫的大小有N行M列(0<=N,M<=1000)。

接下来是一个N*M的迷宫描述。

S代表小明的所在地。

E代表出口,出口只有一个。

.代表可以行走的地方。

!代表岩浆的产生地。(这样的地方会有多个,其个数小于等于10000)

#代表迷宫中的墙,其不仅能阻挡小明前进也能阻挡岩浆的蔓延。

小明携带者宝藏每秒只能向周围移动一格,小明不能碰触到岩浆(小明不能和岩浆处在同一格)。

岩浆每秒会向四周不是墙的地方蔓延一格。

小明先移动完成后,岩浆才会蔓延到对应的格子里。

小明能移动到出口,则小明顺利逃脱。

Output

每组测试数据输出只有一行“Yes”或者“No”。 “Yes”代表小明可以成功逃脱。否则输出“No”。

Sample Input

35 5....!S....#....!#...#E...2 2S.!E2 2SE!.

Sample Output

YesNoYes
解题思路】:

用到两次bfs广搜,

bfs1:岩浆流到每个点的时间预处理。

bfs2:人走到每个点的同时判断时间与岩浆的时间,如果小于岩浆,则此点可以走,否则不能走

代码:

#include <stdio.h>#include <queue>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int dir[4][2]= {{1,0},{-1,0},{0,-1},{0,1}};const int N=1010;const int inf=0x3f3f3f3f;char mapp[N][N];int dis[N][N];bool vis[N][N];int n,m,q;int bx,by;int ex,ey;void init(){    memset(dis,inf,sizeof(dis));    memset(vis,0,sizeof(vis));}struct node{    int x,y,t;};bool ok(node ne){    int x=ne.x;    int y=ne.y;    if(x<0||x>=n||y<0||y>=m) return false;    else return true;}void bfs1(){    queue<node> qa;    for(int i=0; i<n; ++i)    {        for(int j=0; j<m; ++j)        {            if(mapp[i][j]=='!')            {                dis[i][j]=0;                node pre;                pre.x=i,pre.y=j,pre.t=0;                qa.push(pre);            }        }    }    while(!qa.empty())    {        node pre=qa.front();        qa.pop();        for(int i=0; i<4; ++i)        {            node nex;            nex.x=pre.x+dir[i][0];            nex.y=pre.y+dir[i][1];            nex.t=pre.t+1;            if(ok(nex)&&nex.t<dis[nex.x][nex.y])            {                dis[nex.x][nex.y]=nex.t;                qa.push(nex);            }        }    }}void bfs2(){    queue<node> qa;    node pre,last;    pre.x=bx,pre.y=by,pre.t=0;    qa.push(pre);    while(!qa.empty())    {        node pre=qa.front();        qa.pop();        if(pre.x==ex&&pre.y==ey)        {            puts("Yes");            return ;        }        for(int i=0; i<4; ++i)        {            last.x=pre.x+dir[i][0];            last.y=pre.y+dir[i][1];            last.t=pre.t+1;            if(ok(last)&&(last.x==ex)&&(last.y==ey)&&(last.t<=dis[last.x][last.y]))            {                puts("Yes");                return;            }            if(!vis[last.x][last.y] &&ok(last) && last.t<dis[last.x][last.y])            {                vis[last.x][last.y] = 1;                qa.push(last);            }        }    }    puts("No");}int main(){    int t;    scanf("%d",&t);    while(t--)    {        init();        scanf("%d%d",&n,&m);        for(int i=0; i<n; ++i)            scanf("%s",mapp[i]);        for(int i=0; i<n; ++i)            for(int j=0; j<m; ++j)            {                if(mapp[i][j]=='S')                {                    bx=i;                    by=j;                }                if(mapp[i][j]=='E')                {                    ex=i;                    ey=j;                }                if(mapp[i][j]=='#')                {                    dis[i][j]=0;                }            }        bfs1();        bfs2();    }    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 支付宝余额未满16受限怎么办 未满16岁支付宝余额受限怎么办 手机天猫购物买的数量大怎么办 扣扣游戏领礼包出现账号异常怎么办 美容院转让给别人客人要退钱怎么办 卖家毁约中介费担保费怎么办 天猫买东西店家不开增值税票怎么办 天猫专卖店品牌不授权了怎么办 临时京东账号被冻结买的东西怎么办 天猫强行退款给买家商家怎么办 淘宝店铺没交保证金被释放了怎么办 沭阳县地段生过了报名时间怎么办 淘宝买东西地址和收件人填错怎么办 才装修的房子马上要住怎么办 淘宝发货显示无效的发货人怎么办 微信位置和所在地位置不一样怎么办 qq号被冻结了短信发不出去怎么办 商户刷自己信息卡被冻结怎么办 天猫超市买的东西坏了怎么办 天猫超市买东西地址填错了怎么办 天猫超市地址填错了怎么办 天猫超市退货达不到包邮条件怎么办 保千里达令手机锁屏密码忘记怎么办 淘宝买的东西给的发票不见了怎么办 在天猫超市买到发霉怎么办 支付宝红包券金额消费不完怎么办 支付宝向对方发起收款不付怎么办 支付宝收款别人少付了怎么办 红牛领到50元加油优惠券怎么办用 苹果淘宝看评价图片看不清楚怎么办 淘宝账号账户体验中心有违规怎么办 淘宝买的东西需要寄回去维修怎么办 淘宝闪电退款了卖家不肯退了怎么办 云视听会员账号账号密码忘了怎么办 移动卡异地补卡忘记服务密码怎么办 欠我钱的人不接电话怎么办 苹果手机换屏升级系统了黑屏怎么办 苹果手机黑屏时接不到电话怎么办 手机上打电话的图标没了怎么办啊 阿巴町手表上的二维码不生成怎么办 速卖通几个月来搜索曝光很差怎么办