#include<bits/stdc++.h>
using namespace std;
const int maxN = ;
const int inf = 1e9 + ;
char G[maxN][maxN];
int times[maxN][maxN][];
int n, m, sx, sy, ex, ey, ans;
int dir[][] = {{,},{,},{,-},{-,}}; struct node {
int x, y, t, o;
bool operator < (const node& p) const {
return t > p.t;
}
};
void bfs() {
node t = (node) {
sx, sy, ,
};
times[sx][sy][] = ;
priority_queue<node> q;
q.push(t);
while(!q.empty()) {
node u = q.top();
q.pop();
int x = u.x, y = u.y, o = u.o, t = u.t; if(x == ex && y == ey) {
ans = min(ans, t);
return;
}
for(int d = ; d < ; d++) {
int tx = x + dir[d][];
int ty = y + dir[d][];
if(tx < || tx >= n || ty < || ty >= m) //越界
continue; if(G[tx][ty] == '#') {
if(o == ) {
continue;
} else if(times[tx][ty][o-] > t + ) { q.push((node) {
tx,ty,t+,o-
}); times[tx][ty][o-] = t + ;
}
} else if(G[tx][ty] == 'P' && times[tx][ty][o] > t) { q.push((node) {
tx,ty,t,o
}); times[tx][ty][o] = t;
} else if(G[tx][ty] == 'B' && o < && times[tx][ty][o + ] > t + ) { q.push((node) {
tx,ty,t+,o+
}); times[tx][ty][o + ] = t + ;
} else if(times[tx][ty][o] > t + ) { q.push((node) {
tx,ty,t+,o
}); times[tx][ty][o] = t + ;
}
}
}
}
int main() { while(~scanf("%d %d", &n, &m)) {
if(n == )
break;
for(int i = ; i < maxN; i++)
for(int j = ; j < maxN; j++)
for(int k = ; k <= ; k++)
times[i][j][k] = inf;
for(int i = ; i < n; i++) {
scanf("%s", G[i]);
}
for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
if(G[i][j] == 'S')
sx = i, sy = j;
if(G[i][j] == 'T')
ex = i, ey = j;
}
} ans = inf;
bfs();
if(ans == inf) {
printf("-1\n");
} else {
printf("%d\n", ans);
}
}
return ;
}

ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)的更多相关文章

  1. hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS

    题面 题意:N*M的网格图里,有起点S,终点T,然后有'.'表示一般房间,'#'表示毒气房间,进入毒气房间要消耗一个氧气瓶,而且要多停留一分钟,'B'表示放氧气瓶的房间,每次进入可以获得一个氧气瓶,最 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D 80 Days (线段树查询最小值)

    题目4 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules Ve ...

随机推荐

  1. dtexec命令执行SSIS包

    默认情况下,同时安装了 64 位和 32 位版本的 Integration Services 命令提示实用工具的 64 位计算机将在命令提示符处运行 32 位版本.运行 32 位版本的原因是:在 PA ...

  2. c#基础2-out-ref

    //out参数要求在方法的内部 ; JiangJin(ref salary1); Console.WriteLine(salary1); Console.ReadKey(); 必须为其赋值 out.r ...

  3. 安卓下对SD卡文件的读写

    为SD下的操作文件,封装了一些类: package ujs.javawritedata; import java.io.File; import java.io.FileInputStream; im ...

  4. Mysql order by 排序 varchar 类型数据

    Mysql order by 排序 varchar 类型数据 varchar 类型字段排序,  会將数字当成字符串来处理.  排序规则一般是从左到右一位位来比较. +0之后 就转化成INT 类型排序 ...

  5. 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...

  6. SharePoint Server 2016 WEB 网站浏览器支持

    SharePoint Server 2016支持多种常用的Web浏览器,如Internet Explorer,Google Chrome,Mozilla Firefox,Apple Safari和Mi ...

  7. SQLServer 2012 Always on配置全过程

    AlwaysOn取数据库镜像和故障转移集群之长.AlwaysOn不再像故障转移集群那样需要共享磁盘,从而主副本和辅助副本可以更容易的部署到不同的地理位置:AlwaysOn还打破了镜像只能1对1的限制, ...

  8. userBean-作用范围application

    package com.java1234.model; public class Student { private String name;private int age; public Strin ...

  9. 如何使用ABAP Restful API进行代码的全文搜索

    使用这个代码全文搜索的前提条件,是在事务码SFW5里激活业务功能:SRIS_SOURCE_SEARCH 只需要把这个url贴到浏览器里: https://:44355/sap/bc/adt/repos ...

  10. 如何使用Java代码给图片增加倒影效果

    效果 倒影率为90%时的效果: 倒影率10%时的效果: 实现原理 倒影率作为参数rate 传入Reflection button的事件处理函数: CreateImageWithReflection这个 ...