hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS
题意: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的更多相关文章
- 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, ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
任意门:http://hihocoder.com/problemset/problem/1828 Saving Tang Monk II 时间限制:1000ms 单点时限:1000ms 内存限制:25 ...
- hihoCoder #1831 : 80 Days-RMQ (ACM/ICPC 2018亚洲区预选赛北京赛站网络赛)
水道题目,比赛时线段树写挫了,忘了RMQ这个东西了(捞) #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an int ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B Tomb Raider 【二进制枚举】
任意门:http://hihocoder.com/problemset/problem/1829 Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 L ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛D-80 Days--------树状数组
题意就是说1-N个城市为一个环,最开始你手里有C块钱,问从1->N这些城市中,选择任意一个,然后按照顺序绕环一圈,进入每个城市会有a[i]元钱,出来每个城市会有b[i]个城市,问是否能保证经过每 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(二进制枚举)
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daughter of a missing adv ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(尺取)题解
题意:n个城市,初始能量c,进入i城市获得a[i]能量,可能负数,去i+1个城市失去b[i]能量,问你能不能完整走一圈. 思路:也就是走的路上能量不能小于0,尺取维护l,r指针,l代表出发点,r代表当 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛
题意:到一个城市得钱,离开要花钱.开始时有现金.城市是环形的,问从哪个开始,能在途中任意时刻金钱>=0; 一个开始指针i,一个结尾指针j.指示一个区间.如果符合条件++j,并将收益加入sum中( ...
- hihoCoder-1829 2018亚洲区预选赛北京赛站网络赛 B.Tomb Raider 暴力 字符串
题面 题意:给你n个串,每个串都可以选择它的一个长度为n的环形子串(比如abcdf的就有abcdf,bcdfa,cdfab,dfabc,fabcd),求这个n个串的这些子串的最长公共子序列(每个串按顺 ...
随机推荐
- ★Java语法(二)——————————数据类型常见问题
1.用float型定义变量:float a = 3.14 :是否正确? 不正确.“=” 两边的精度类型不匹配,应为:float a =(float)3.14 或 float a =3.14F 或 ...
- 【Oracle】truncate分区表
分区表是生产中常用的一种表,它可以实现数据的按类存放,极大的提高了数据的查询及维护.当我们不需要某一分区的数据时,可以采用truncate来清空分区.实验如下: SQL)) partition by ...
- Assembly之instruction之CMP
CMP[.W] Compare source and destinationCMP.B Compare source and destination Syntax CMP src,dst or ...
- jquery Contains 实现查询
var filter = $(this).val(); var filterResult = $(this).find('h2:Contains(' + filter + ')'); if (filt ...
- change project compliance and jre to 1.5
这个主要检查一下几点 项目的jdk为1.7 java版本设置为1.7 java compiler 的页面设置为以下,并且去掉勾选java compiler 下面的 enableproject spec ...
- HDU_5833_高斯消元
参考自:http://www.cnblogs.com/flipped/p/5771492.html 自己做的时候不知道如何求种数.看了题解,感觉思路灰常巧妙.同时也感觉这是一道好题. 精髓在于转化为线 ...
- servlet向浏览器输出信息
package com.aaa.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebS ...
- js判断数组中是否包含某个值
/** * 判断数组中是否包含某个值 * @param arr 数组 * @param str 值 * @returns {boolean} */ function contains(arr, str ...
- Js正则匹配处理时间
<html> <body> <script type="text/javascript"> //将long 型 转换为 日期格式 年-月-日 h ...
- 文献阅读 | Benefits and limitations of genome-wide association studies
参考:今日阅读:GWAS的优劣势 - Omics Liu Omics 待续~