题目链接

Problem Description

The Princess has been abducted by the BEelzebub feng5166, our hero Ignatius has to rescue our pretty Princess. Now he gets into feng5166's castle. The castle is a large labyrinth. To make the problem simply, we assume the labyrinth is a N*M two-dimensional array which left-top corner is (0,0) and right-bottom corner is (N-1,M-1). Ignatius enters at (0,0), and the door to feng5166's room is at (N-1,M-1), that is our target. There are some monsters in the castle, if Ignatius meet them, he has to kill them. Here is some rules:

1.Ignatius can only move in four directions(up, down, left, right), one step per second. A step is defined as follow: if current position is (x,y), after a step, Ignatius can only stand on (x-1,y), (x+1,y), (x,y-1) or (x,y+1).

2.The array is marked with some characters and numbers. We define them like this:

. : The place where Ignatius can walk on.

X : The place is a trap, Ignatius should not walk on it.

n : Here is a monster with n HP(1<=n<=9), if Ignatius walk on it, it takes him n seconds to kill the monster.

Your task is to give out the path which costs minimum seconds for Ignatius to reach target position. You may assume that the start position and the target position will never be a trap, and there will never be a monster at the start position.

Input

The input contains several test cases. Each test case starts with a line contains two numbers N and M(2<=N<=100,2<=M<=100) which indicate the size of the labyrinth. Then a N*M two-dimensional array follows, which describe the whole labyrinth. The input is terminated by the end of file. More details in the Sample Input.

Output

For each test case, you should output "God please help our poor hero." if Ignatius can't reach the target position, or you should output "It takes n seconds to reach the target position, let me show you the way."(n is the minimum seconds), and tell our hero the whole path. Output a line contains "FINISH" after each test case. If there are more than one path, any one is OK in this problem. More details in the Sample Output.

Sample Input

5 6
.XX.1.
..X.2.
2...X.
...XX.
XXXXX.
5 6
.XX.1.
..X.2.
2...X.
...XX.
XXXXX1
5 6
.XX...
..XX1.
2...X.
...XX.
XXXXX.

Sample Output

It takes 13 seconds to reach the target position, let me show you the way.
1s:(0,0)->(1,0)
2s:(1,0)->(1,1)
3s:(1,1)->(2,1)
4s:(2,1)->(2,2)
5s:(2,2)->(2,3)
6s:(2,3)->(1,3)
7s:(1,3)->(1,4)
8s:FIGHT AT (1,4)
9s:FIGHT AT (1,4)
10s:(1,4)->(1,5)
11s:(1,5)->(2,5)
12s:(2,5)->(3,5)
13s:(3,5)->(4,5)
FINISH
It takes 14 seconds to reach the target position, let me show you the way.
1s:(0,0)->(1,0)
2s:(1,0)->(1,1)
3s:(1,1)->(2,1)
4s:(2,1)->(2,2)
5s:(2,2)->(2,3)
6s:(2,3)->(1,3)
7s:(1,3)->(1,4)
8s:FIGHT AT (1,4)
9s:FIGHT AT (1,4)
10s:(1,4)->(1,5)
11s:(1,5)->(2,5)
12s:(2,5)->(3,5)
13s:(3,5)->(4,5)
14s:FIGHT AT (4,5)
FINISH
God please help our poor hero.
FINISH

分析:

带路径的搜索,在搜索的时候额外吧路径保存下来。

代码:

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
int x;
int y;
int out;
friend bool operator <(node a,node b)
{
return a.out>b.out;
}
int luj[1000][2];
} now,then1;
int bj[1000][1000];
char tu[1000][1000];
int n,m;
int next1[4][2]= {{0,1},{0,-1},{-1,0},{1,0} };
void bfs(int x,int y)
{
memset(bj,0,sizeof(bj));
priority_queue<node> q;
now.x=x;
now.y=y;
now.out=0;
now.luj[0][0]=x;
now.luj[0][1]=y;
bj[x][y]=1;
q.push(now);
while(!q.empty())
{
now=q.top();
if(now.x==n-1&&now.y==m-1)
{
int zbx=0,zby=0;
printf("It takes %d seconds to reach the target position, let me show you the way.\n",now.out);
for(int i=0; i<now.out; i++)
{
if(zbx==now.luj[i+1][0]&&zby==now.luj[i+1][1])
{
printf("%ds:FIGHT AT (%d,%d)\n",i+1,now.luj[i+1][0],now.luj[i][1]);
zbx=now.luj[i+1][0];
zby=now.luj[i+1][1];
continue;
}
printf("%ds:(%d,%d)->(%d,%d)\n",i+1,now.luj[i][0],now.luj[i][1],now.luj[i+1][0],now.luj[i+1][1]);
zbx=now.luj[i+1][0];
zby=now.luj[i+1][1];
}
printf("FINISH\n");
return ;
}
q.pop();
for(int i=0; i<4; i++)
{
then1=now;
then1.x=now.x+next1[i][0];
then1.y=now.y+next1[i][1];
if(then1.x>=0&&then1.x<n&&then1.y>=0&&then1.y<m&&bj[then1.x][then1.y]==0&&tu[then1.x][then1.y]!='X')
{
if(tu[then1.x][then1.y]=='.')
{
then1.out=now.out+1;
then1.luj[then1.out][0]=then1.x;
then1.luj[then1.out][1]=then1.y;
bj[then1.x][then1.y]=1;
q.push(then1);
}
if(tu[then1.x][then1.y]>='1'&&tu[then1.x][then1.y]<='9')
{
int cishu=tu[then1.x][then1.y]-'0';
then1.out=now.out+1;
then1.luj[then1.out][0]=then1.x;
then1.luj[then1.out][1]=then1.y;
for(int k=0; k<cishu; k++)
{
then1.out+=1;
then1.luj[then1.out][0]=then1.x;
then1.luj[then1.out][1]=then1.y;
bj[then1.x][then1.y]=1;
}
q.push(then1);
}
}
}
}
printf("God please help our poor hero.\nFINISH\n");
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=0; i<n; i++)
{
scanf("%s",tu[i]);
}
bfs(0,0);
}
}

HDU 1026 Ignatius and the Princess I (广搜)的更多相关文章

  1. hdu 1026 Ignatius and the Princess I

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1026 Ignatius and the Princess I Description The Prin ...

  2. hdu 1026 Ignatius and the Princess I(BFS+优先队列)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1026 Ignatius and the Princess I Time Limit: 2000/100 ...

  3. hdu 1026:Ignatius and the Princess I(优先队列 + bfs广搜。ps:广搜AC,深搜超时,求助攻!)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  4. hdu 1026 Ignatius and the Princess I (bfs+记录路径)(priority_queue)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1026 Problem Description The Princess has been abducted ...

  5. hdu 1026 Ignatius and the Princess I【优先队列+BFS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  6. HDU 1026 Ignatius and the Princess I(BFS+优先队列)

    Ignatius and the Princess I Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  7. hdu 1026 Ignatius and the Princess I 搜索,输出路径

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  8. HDU 1026 Ignatius and the Princess I(BFS+记录路径)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  9. hdu 1026 Ignatius and the Princess I(bfs)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  10. HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题

    这个问题是一个典型的类型的问题迷宫广泛的搜索. 在网上看到了很多解决方案. 没什么解决问题的分析报告,不指出其中的关键点.代码更像是一大抄.一些分析师也有很大的文章分析.只是不要全部命中关键,什么是广 ...

随机推荐

  1. TCP系列16—重传—6、基础快速重传(Fast Retransmit)

    一.快速重传介绍 按照TCP协议,RTO超时重传是一个非常重要的事件,当RTO超时的时候,TCP会同时通过两种方式非常谨慎的降低发送数据包的速率,一种是基于拥塞控制削减发送窗口的大小,另外一个是通过指 ...

  2. TCP系列05—连接管理—4、TCP连接的ISN、连接建立超时及TCP的长短连接

    一.TCP连接的ISN         之前我们说过初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因 防止同一个连接的不同实例(di ...

  3. Qt语言家(Qt Linguist)更新翻译报错-Qt5.9-MinGW

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt语言家(Qt Linguist)更新翻译报错-Qt5.9-MinGW     本文地址:h ...

  4. tomcat 相关

    servlet.xml 文件: 1 . 修改端口号,找到如下标签,port 属性就是端口号,修改之后重启服务器即可, <Connector connectionTimeout="200 ...

  5. 2011 Multi-University Training Contest 6 - Host by JLU

    打了4hours,做出一道题...太菜了.rank:45/107 开场看B,题目看不懂...3hours半才发现i<=N-1,不是i<=x-1.然而还是不会. 看到J有人过了,发现是个简单 ...

  6. HTML5 不再支持哪些元素

    HTML5中已经不支持以下的元素,不建议在进行开发时再使用以下的元素. 1.acronym(建议abbr):定义首字母缩写 2.applet(建议object):定义applet 3.basefont ...

  7. BZOJ4873 Shoi2017寿司餐厅(最小割)

    选择了某个区间就必须选择其所有子区间,容易想到这是一个最大权闭合子图的模型.考虑将区间按长度分层,相邻层按包含关系连边,区间[i,j]的权值即di,j,其中最后一层表示长度为1的区间的同时也表示寿司本 ...

  8. HDU4825:Xor Sum——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=4825 Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含 ...

  9. [Leetcode] search insert position 寻找插入位置

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  10. 【队列】【P2827】【NOIP2016D2T3】蚯蚓

    传送门 Description 本题中,我们将用符号 $\lfloor c \rfloor$ 表示对 $c$ 向下取整,例如:$\lfloor 3.0 \rfloor = \lfloor 3.1 \r ...