解题思路:http://acm.swust.edu.cn/problem/1023/

Time limit(ms): 5000        Memory limit(kb): 65535
 
 
Description

BH is in a maze,the maze is a matrix,he wants to escape!

 
Input

The input consists of multiple test cases.

For each case,the first line contains 2 integers N,M( 1 <= N, M <= 100 ).

Each of the following N lines contain M characters. Each character means a cell of the map.

Here is the definition for chracter.

For a character in the map:

'S':BH's start place,only one in the map.

'E':the goal cell,only one in the map.

'.':empty cell.

'#':obstacle cell.

'A':accelerated rune.

BH can move to 4 directions(up,down,left,right) in each step.It cost 2 seconds without accelerated rune.When he get accelerated rune,moving one step only cost 1 second.The buff lasts 5 seconds,and the time doesn't stack when you get another accelerated rune.(that means in anytime BH gets an accelerated rune,the buff time become 5 seconds).

 
 
Output

The minimum time BH get to the goal cell,if he can't,print "Please help BH!".

 
Sample Input
5 5
....E
.....
.....
##...
S#...
 
5 8
........
........
..A....A
A######.
S......E
Sample Output
Please help BH!
12
 

由于OJ上传数据的BUG,换行请使用"\r\n",非常抱歉

题目大意:一个迷宫逃离问题,只是有了加速符A,正常情况下通过一个格子2s,有了加速符只要1s,并且加速符持续5s,‘S'代表起点

     'E'代表终点,'#'代表障碍,'.'空格子,能够逃离输出最少用时,否则输出"Please help BH!"

解题思路:BFS,用一个3维dp数组存贮,每一点在不同加速状态下的值,然后筛选dp数组终点的最小值即可

代码如下:

 #include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std; #define maxn 101
#define inf 0x3f3f3f3f int dir[][] = { , , , , -, , , - };
int dp[maxn][maxn][];
int sx, sy, ex, ey, n, m;
char map[maxn][maxn]; struct node{
int x, y, step, speed;//spead加速
};
void bfs(){
node now, next;
now.x = sx, now.y = sy, now.step = , now.speed = ;
dp[sx][sy][] = ;
queue<node>Q;
Q.push(now);
while (!Q.empty()){
now = Q.front(); Q.pop();
for (int i = ; i < ; i++){
next = now;
next.x += dir[i][];
next.y += dir[i][];
if (next.x < || next.x >= n || next.y < || next.y >= m || map[next.x][next.y] == '#')continue;//不可行状态
if (next.speed){
//加速效果
next.speed--;
next.step++;
}
else next.step += ;
if (map[next.x][next.y] == 'A')next.speed = ;//获得加速神符
if (next.step < dp[next.x][next.y][next.speed]){
dp[next.x][next.y][next.speed] = next.step;
Q.push(next);
}
}
}
int ans = inf;
for (int i = ; i >= ; i--)
ans = min(ans, dp[ex][ey][i]);
if (ans >= inf)
cout << "Please help BH!\r\n";
else
cout << ans << "\r\n";
}
int main(){
while (cin >> n >> m){
memset(dp, inf, sizeof dp);
for (int i = ; i < n; i++){
cin >> map[i];
for (int j = ; j < m; j++){
if (map[i][j] == 'S')sx = i, sy = j;
if (map[i][j] == 'E')ex = i, ey = j;
}
}
bfs();
}
return ;
}

[Swust OJ 1023]--Escape(带点其他状态的BFS)的更多相关文章

  1. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  2. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  3. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  4. 胜利大逃亡(续)(状态压缩bfs)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. Pots POJ - 3414【状态转移bfs+回溯】

    典型的倒水问题: 即把两个水杯的每种状态视为bfs图中的点,如果两种状态可以转化,即可认为二者之间可以连一条边. 有3种倒水的方法,对应2个杯子,共有6种可能的状态转移方式.即相当于图中想走的方法有6 ...

  6. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  7. [Swust OJ 1026]--Egg pain's hzf

      题目链接:http://acm.swust.edu.cn/problem/1026/     Time limit(ms): 3000 Memory limit(kb): 65535   hzf ...

  8. [Swust OJ 1139]--Coin-row problem

    题目链接:  http://acm.swust.edu.cn/contest/0226/problem/1139/ There is a row of n coins whose values are ...

  9. [Swust OJ 385]--自动写诗

    题目链接:http://acm.swust.edu.cn/problem/0385/ Time limit(ms): 5000 Memory limit(kb): 65535    Descripti ...

随机推荐

  1. C# async await 例子

    private static async void Worker() { Console.Write("main thread id is :{0}",Thread.Current ...

  2. 加密解密技术—Web.config加密和解密

    阅读目录 一:我们为什么要对web.config配置文件中的配置节加密? 二:怎么样加密和解密? 三:实例 四:运行效果 一:我们为什么要对web.config配置文件中的配置节加密? 因为在我们的项 ...

  3. (转)《JAVA与模式》之模板方法模式

    该文章转自:http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 在阎宏博士的<JAVA与模式>一书中开头 ...

  4. Gartner 认定 Microsoft 为具有远见卓识的云基础结构即服务提供商

    四个月前, Windows Azure 基础结构服务结束了预览版阶段,正式发布了,它具有业内领先的 SLA.随后, 凭借愿景的完整性和执行力,Gartner 很快认可了 Microsoft 在市场中的 ...

  5. POJ 3693 Maximum repetition substring(后缀数组+ST表)

    [题目链接] poj.org/problem?id=3693 [题目大意] 求一个串重复次数最多的连续重复子串并输出,要求字典序最小. [题解] 考虑错位匹配,设重复部分长度为l,记s[i]和s[i+ ...

  6. 一步一步学数据结构之1--n(通用树)

    今天来看大家介绍树,树是一种非线性的数据结构,树是由n个结点组成的有限集合,如果n=0,称为空树:如果n>0,则:有一个特定的称之为根的结点,它只有直接后继,但没有直接前驱:除根以外的其他结点划 ...

  7. php 求水仙花数优化

    水仙花数是指一个n位数(n>=3),它每一个位上数字的n次幂之和等于它本身,n为它的位数.(比如:1^3+5^3+3^3 = 153) 水仙花数又称阿姆斯特朗数. 三位的水仙花数有4个:153, ...

  8. Sql Server 2008/2005 数据库还原出现 3154错误

    在Sql Server 2008/2005 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决 ...

  9. Foundation NSMutableArray遍历,选取出符合条件的所有对象

    一.查找数组中一个元素,找到后立即返回 当遍历数组只需要返回其中一个符合条件的元素时,使用 indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, ...

  10. c++ primer plus 习题答案(5)

    p333.7 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; ...