Time Limit: 2 Seconds Memory Limit: 65536 KB
Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison.
Angel's friends want to save Angel. Their task is: approach Angel. We assume that "approach Angel" is to get to the position where Angel stays. When there's a guard in the grid, we must kill him (or her?) to move into the grid. We assume that we moving up, down, right, left takes us 1 unit time, and killing a guard takes 1 unit time, too. And we are strong enough to kill all the guards.
You have to calculate the minimal time to approach Angel. (We can move only UP, DOWN, LEFT and RIGHT, to the neighbor grid within bound, of course.)
Input
First line contains two integers stand for N and M.
Then N lines follows, every line has M characters. "." stands for road, "a" stands for Angel, and "r" stands for each of Angel's friend.
Process to the end of the file.
Output
For each test case, your program should output a single integer, standing for the minimal time needed. If such a number does no exist, you should output a line containing "Poor ANGEL has to stay in the prison all his life."
Sample Input
7 8
#.#####.
#.a#..r.
#..#x...
..#..#.#
#...##..
.#......
........
Sample Output
13
解题报告:本题比较经典的地方的是杀死士兵需要增加一个时间,所以不能简单的用哪个先到达终点来进行判断。
所以这里开了一个mintiime数组来记录走到每一点所花费的最少的时间来判断走到每一点所需要的最少的时间
这样子既不会使走过的路被重复的走,又能保证最终是最少的步数;
#include<cstdio> #include<cstring> #include<queue> #define maxn 200 + 5 #define INF 0x7ffffff using namespace std; struct node { int x, y; int time; }; int dir[4][2] = {0,1,0,-1,1,0,-1,0}; int mintime[maxn][maxn]; char mp[maxn][maxn]; int ex, ey, sx, sy, n, m; queue < node >Q; int bfs( node start) { int i; node pre; Q.push(start); while(!Q.empty( ) ) { pre = Q.front( ); Q.pop( ); for(i = 0; i < 4;i++ ) { int x = pre.x + dir[i][0]; int y = pre.y + dir[i][1]; if(x<n && x>=0 && y<m && y>=0 && mp[x][y] != '#') { node t; t.x = x; t.y = y; t.time = pre.time + 1; if(mp[x][y]=='x') t.time ++; if(t.time < mintime[x][y]) { mintime[x][y] = t.time; Q.push( t ); } } } } return mintime[ex][ey]; } int main() { while( scanf( "%d%d",&n, &m) != EOF ) { node start; memset( mp, 0, sizeof( mp ) ); for(int i=0;i<n;i++) { scanf("%s",mp[i]); for( int j = 1; j<m; j++) { mintime[i][j] = INF; if(mp[i][j] == 'r') { sx = i; sy = j;} else if( mp[i][j] == 'a') { ex = i; ey = j;} } } start.x = sx; start.y = sy; start.time = 0; mintime[sx][sy] = 0; int ans = bfs( start ); if( ans < INF ) printf("%d\n",ans); else printf("Poor ANGEL has to stay in the prison all his life.\n"); } return 0; }
相关推荐
2. ZOJ Problem Set – 1037 Gridland 该题目主要考察了数组和矩阵的操作能力,要求解决 Gridland 问题。该问题的解决需要对数组和矩阵的操作有深入的理解。 知识点:数组、矩阵、数组操作、矩阵操作。 3. ZOJ ...
本题是ZOJ Problem Set中的2003年题目——“Substitution Cipher”,涉及密码学中的替换密码。题目描述了一种用于加密消息的替换密码方法,该方法基于一个可变的替换表,使得每个字符被另一个相同的字母替换。为了...
zoj 3212 K-Nice.md
zoj 2561 Order-Preserving Codes.md
ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)领域中有着广泛的影响力。这个“ZOJ题解集合-截至2835”显然是一份包含了大量ZOJ题目解决方案的压缩包,其中涵盖了...
在标签中,"bfs最短路径"和"zoj1055 bfs求最短路径"进一步强调了题目要求用BFS算法来求解图中的最短路径问题。ZOJ1055这个标签则直接指向了该编程挑战。 在压缩包内的文件"1055-Oh,Those Achin'Feet.cpp"是一个C++...
Problem Arrangement zoj 3777
ZOJ,全称“浙江大学程序在线评测系统”(Zhejiang University Online Judge),是一个提供信息学(算法竞赛)题库及程序评测的网站。以下是关于ZOJ的详细介绍: 一、基本信息 名称:浙江大学程序在线评测系统(ZOJ)...
zoj_1004.cpp 求单词字母进出栈后能形成目标串的进出方案 广度优先搜索求解
标题 "zoj 1140-zju 2433 简单题的部分答案" 暗示了这是一个关于编程竞赛题目的解答集合,其中涵盖了ZOJ(浙江大学在线评测系统)上的两道题目——ZOJ 1140 和 ZJU 2433。这些题目可能属于算法或数据结构的范畴,...
zoj 3590 -3+1.md
【标题】"ZOJ-CPP.zip" 是一个包含ZOJ(在线判题系统ZeroJudge)网站上多个C++编程练习解答的压缩包。这个压缩包的名称表明它专注于C++语言,很可能是一个学习资源,旨在帮助初学者理解和解决动态规划问题。 【描述...
zoj 3798 Abs Problem.md
【标题】"ZOJ 1002" 是一个在线编程竞赛题目,源自ZOJ(Zhejiang Online Judge),这是一个面向ACM/ICPC(国际大学生程序设计竞赛)的在线评测系统。题目编号1002,通常表示该题是ZOJ平台上的一个问题,可能涉及算法...
标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...
zoj 1344 A Mazing Problem.md
【标题】"zoj 源码700题"是指一个包含700多道ZOJ(在线判题系统Zhejiang Online Judge)编程竞赛题目的源代码集合。这个资源对于学习算法、提高编程技能以及准备编程竞赛的学员来说极具价值。 【描述】"包含了zoj...
【ZOJ完全解题报告】是一份专门为喜爱ACM(国际大学生程序设计竞赛)的同学们准备的资源,其中详尽地记录了解决ZOJ在线判题系统上几十道编程题目的全过程和方法。这份报告旨在帮助参赛者提高解题技巧,理解和掌握...
【标题】"zoj.zip_zoj"所对应的资源是一个与ZOJ(Zhejiang Online Judge)相关的代码集合。ZOJ是浙江大学主办的一个在线编程竞赛平台,它提供了多种算法题目供用户练习和提交代码进行评测。这个压缩包很可能包含了在...
**ZOJ月赛题解 (ZOJ Monthly, August 2014)** ZOJ(Zhejiang Online Judge)是中国著名的在线编程竞赛平台之一,它为程序员和学生提供了丰富的算法练习和比赛机会。2014年8月的ZOJ月赛是一场面向广大编程爱好者的...