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个串的这些子串的最长公共子序列(每个串按顺 ...
随机推荐
- 时序分析:DTW算法(基于模板)
对时序对象进行分析,使用KMP算法可以分析速率不变的模式,参考时序分析:欧式空间轨迹模式识别.使用基于模板匹配的方法,对于速率发生变化的模式,需要用新的对速率要求松散的方法,DTW方法为一种广泛使用的 ...
- extension Array where Element 代码学习
var fieldNames: [String] { let p = UnsafePointer<Int32>(self.pointer) return Array(utf8Strings ...
- Eclipse(含STS)安装插件/软件、更新
安装方式 Eclipse安装插件的三种方式 直接复制安装 离线下载好插件,通常去这个插件的官网去找,就是在线安装的地址?如testng可以去http://beust.com/eclipse即http: ...
- eas之设定table选择模式
tblMain.getSelectManager().setSelectMode(0);--不能选择 tblMain.getSelectManager().setSelectMode(1);--选择 ...
- Golang - 处理字符串
目录 Golang - 处理字符串 1. 字符串操作 2. 字符串转换 Golang - 处理字符串 1. 字符串操作 func Contains(s, substr string) bool 字符串 ...
- Git 基础教程 之 分支管理及策略
创建一个属于自己的分支,别人看不到,你在你自己的分支上干活, 想提交就提交,直至开发完毕后,再一次性合并到原来分支上.这样,既安全,又不影响他人工作. 在实际的开发过程中,应照几个基 ...
- sqlalchemy带条件查询相关应用
sqlalchemy带条件查询 filter_by与filter filter_by 与filter的区别: 1. filter_by只能取值= filter可以==,!=,>=,<=等多 ...
- UVALive Archive - 6196 - Party Games
题目: You've been invited to a party. The host wants to divide the guests into 2 teams for party games ...
- ASP.NET--IIS的Http请求流程
下面的文章是基于IIS经典模式给出的流程图,和IIS集成模式有些区别,WIN7系统自带的是IIS7,和文章分写的有些区别,现在基本上都用IIS7了,所以不要入坑 伯乐在线的文章一 伯乐在线的文章二
- mongodb--作为windows服务启动
注意需要以管理员权限运行CMD