题面

题意:N*M的网格图里,有起点S,终点T,然后有'.'表示一般房间,'#'表示毒气房间,进入毒气房间要消耗一个氧气瓶,而且要多停留一分钟,'B'表示放氧气瓶的房间,每次进入可以获得一个氧气瓶,最多只能带5个,'P'表示有加速器的房间,进入可以获得一个,可以拥有无限个,然后使用一个可以让你用的时间减一。

题解:对于P房间,也就是到达时不花费时间,

对于#房间,也就是进入前必须要有氧气瓶,消耗的时间为2

对于B房间,氧气瓶数量num=min(num+1,5)

因为有氧气瓶,所以每一个节点状态除了位置x,y,还有当前氧气瓶x,当前花费的时间time

这样的节点扔进队列就行了,按time小的顺序拿出来继续,(所以用了个优先队列)第一次到达终点的那个time就是最小的time

 #include<bits/stdc++.h>
using namespace std;
bool vis[][][];
int n,m;
struct Node
{
int x,y,ox,step;
Node() {}
Node(int _x,int _y,int _ox,int _step)
{
x=_x;
y=_y;
ox=_ox;
step=_step;
}
bool operator<(const Node& e) const {return step>e.step;}
};
char ch[][];
priority_queue<Node> Q;
int p[]={,,,-};
int q[]={,-,,};
int main()
{
while (scanf("%d%d",&n,&m))
{
if (n==&&m==) break;
for (int i=;i<n;i++) scanf("%s",ch[i]);
int sx,sy,ex,ey;
for (int i=;i<n;i++)
for (int j=;j<m;j++)
{
if(ch[i][j]=='S')
{
sx=i;sy=j;
}else
if(ch[i][j]=='T')
{
ex=i;ey=j;
}
}
while(!Q.empty()) Q.pop();
Node start(sx,sy,,);
memset(vis,,sizeof(vis));
vis[sx][sy][]=;
Q.push(start);
bool ok=false;
while(!Q.empty())
{
Node node=Q.top();
Q.pop();
if (node.x==ex&&node.y==ey)
{
ok=true;
printf("%d\n",node.step);
break;
}
for (int i=;i<=;i++)
{
int xx=node.x+p[i],yy=node.y+q[i];
if (xx< || xx>=n || yy< || yy>=m) continue;
int step=node.step;
if(ch[xx][yy]=='B')
{
int _ox=min(,node.ox+);
if (vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step+);
Q.push(temp);
}else
if(ch[xx][yy]=='#')
{
int _ox=node.ox;
if (!_ox) continue;
_ox--;
if(vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step+);
Q.push(temp);
}else
if(ch[xx][yy]=='P')
{
int _ox=node.ox;
if(vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step);
Q.push(temp);
}else
{
int _ox=node.ox;
if(vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step+);
Q.push(temp);
}
}
}
if (!ok) puts("-1");
}
return ;
}

hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS的更多相关文章

  1. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)

    #include<bits/stdc++.h> using namespace std; ; ; char G[maxN][maxN]; ]; int n, m, sx, sy, ex, ...

  2. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】

    任意门:http://hihocoder.com/problemset/problem/1828 Saving Tang Monk II 时间限制:1000ms 单点时限:1000ms 内存限制:25 ...

  3. hihoCoder #1831 : 80 Days-RMQ (ACM/ICPC 2018亚洲区预选赛北京赛站网络赛)

    水道题目,比赛时线段树写挫了,忘了RMQ这个东西了(捞) #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an int ...

  4. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B Tomb Raider 【二进制枚举】

    任意门:http://hihocoder.com/problemset/problem/1829 Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 L ...

  5. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛D-80 Days--------树状数组

    题意就是说1-N个城市为一个环,最开始你手里有C块钱,问从1->N这些城市中,选择任意一个,然后按照顺序绕环一圈,进入每个城市会有a[i]元钱,出来每个城市会有b[i]个城市,问是否能保证经过每 ...

  6. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(二进制枚举)

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daughter of a missing adv ...

  7. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(尺取)题解

    题意:n个城市,初始能量c,进入i城市获得a[i]能量,可能负数,去i+1个城市失去b[i]能量,问你能不能完整走一圈. 思路:也就是走的路上能量不能小于0,尺取维护l,r指针,l代表出发点,r代表当 ...

  8. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛

    题意:到一个城市得钱,离开要花钱.开始时有现金.城市是环形的,问从哪个开始,能在途中任意时刻金钱>=0; 一个开始指针i,一个结尾指针j.指示一个区间.如果符合条件++j,并将收益加入sum中( ...

  9. hihoCoder-1829 2018亚洲区预选赛北京赛站网络赛 B.Tomb Raider 暴力 字符串

    题面 题意:给你n个串,每个串都可以选择它的一个长度为n的环形子串(比如abcdf的就有abcdf,bcdfa,cdfab,dfabc,fabcd),求这个n个串的这些子串的最长公共子序列(每个串按顺 ...

随机推荐

  1. 努比亚 Z17 mini s (Nubia NX589J) 解锁BootLoader 并刷入recovery ROOT

    首先下载好工具链接:链接:https://pan.baidu.com/s/1gher4T9 密码:rypn 备用下载链接:https://pan.baidu.com/s/1nxdzt9Z 本篇教程教你 ...

  2. js 图片轮播代码编辑

    图片轮播,将几张图片统一放在展示平台 banner上,通过banner移动将图片轮流播放. <script>// 取对象 var btn_l = document.getElementsB ...

  3. C语言笔记(一)

    笑话一枚:程序员 A:“哥们儿,最近手头紧,借点钱?”程序员 B:“成啊,要多少?”程序员 A:“一千行不?”程序员 B:“咱俩谁跟谁!给你凑个整,1024,拿去吧.” =============== ...

  4. WebGL画点程序v3

    本文程序实现画一个点的任务,如下图.其中,点的颜色由Javascript传到片元着色器程序中. 整个程序包含两个文件,分别是: 1. HelloPoint3.html <!DOCTYPE HTM ...

  5. POJ_3020_最小路径覆盖

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8721   Accepted: 4330 ...

  6. iOS https 证书链获取

    - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)chall ...

  7. POST请求成功,但接口返回数据不正确

    事件:使用Jmeter做APP的搜索接口测试,请求成功了,但无论keyword是什么“内容”(这里的内容是带引号的哦),接口返回的内容都是:未匹配到搜索结果 排查问题: keyword=“世界” st ...

  8. eas之怎么设置单据保存或者提交完不跳到下个新增页面

    this.chkMenuItemSubmitAndAddNew.setSelected(false);

  9. HDU1087 - Super Jumping! Jumping! Jumping!【动态规划】

    zh成功的在他人的帮助下获得了与小姐姐约会的机会,同时也不用担心被非"川大"的女票发现了,可是如何选择和哪些小姐姐约会呢?zh希望自己可以循序渐进,同时希望挑战自己的极限,我们假定 ...

  10. [bzoj2044] 三维导弹拦截 (二分图最大匹配+dp)

    传送门 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利! ...