Rescue

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 19985    Accepted Submission(s):
7110

Problem Description
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
 

 

/*
题意 :公主被抓(为什么公主老是被魔王抓,烂梗),我要去救公主 (其实我不想救,心累)
a表示公主所在位置,r是我所在位置,#是墙,.是路,X是怪,打怪要两点疲劳值,走路要一点
疲劳值,问救出公主要多少点疲劳值救出公主的话输出疲劳值点数如果救不出输出
"Poor ANGEL has to stay in the prison all his life."
题解:同 poj2312(我相信细微的差别你们能改出来)
*/ #include<stdio.h>
#include<string.h>
#include<queue>
#define MAX 210
using namespace std;
char map[MAX][MAX];
int n,m;
struct node
{
int x;
int y;
int time; friend bool operator < (node a,node b)//定义结构体的优先队列
{
return a.time>b.time;//花费时间少的先出队
} };
void bfs(int x1,int y1,int x2,int y2)
{
int j,i,ok=0; priority_queue<node>q;//定义结构 体优先队列 int move[4][2]={0,1,0,-1,1,0,-1,0};
node begin,end;
begin.x=x1;
begin.y=y1;
begin.time=0;
q.push(begin);
while(!q.empty())
{ end=q.top();//优先队列 q.pop();
if(end.x==x2&&end.y==y2)
{
ok=1;
break;
}
for(i=0;i<4;i++)
{
begin.x=end.x+move[i][0];
begin.y=end.y+move[i][1];
if(0<=begin.x&&begin.x<n&&0<=begin.y&&begin.y<m&&map[begin.x][begin.y]!='#')
{
if(map[begin.x][begin.y]=='x')
begin.time=end.time+2;
else
begin.time=end.time+1;
map[begin.x][begin.y]='#';
q.push(begin); }
}
}
if(ok)
printf("%d\n",end.time);//注意这里
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
int main()
{
int j,i,s,t,k,x1,x2,y1,y2;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
scanf("%s",map[i]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]=='a')
{
x2=i;y2=j;
}
else if(map[i][j]=='r')
{
x1=i;y1=j;
}
}
}
bfs(x1,y1,x2,y2);
}
return 0;
}

  

hdoj 1242 Rescue的更多相关文章

  1. BFS HDOJ 1242 Rescue

    题目传送门 题意:从r走到a,遇到x多走一步,问最小走到a的步数 分析:因为r有多个,反过来想从a走到某个r的最小步数,简单的BFS.我对这题有特殊的感情,去年刚来集训队时肉鸽推荐了这题,当时什么都不 ...

  2. 【HDOJ】1242 Rescue

    BFS+优先级队列. #include <iostream> #include <cstdio> #include <cstring> #include <q ...

  3. HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)

    Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...

  4. hdu 1242 Rescue

    题目链接:hdu 1242 这题也是迷宫类搜索,题意说的是 'a' 表示被拯救的人,'r' 表示搜救者(注意可能有多个),'.' 表示道路(耗费一单位时间通过),'#' 表示墙壁,'x' 代表警卫(耗 ...

  5. HDOJ并查集题目 HDOJ 1213 HDOJ 1242

    Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. ...

  6. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  7. hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...

  8. HDU 1242 Rescue (BFS(广度优先搜索))

    Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  9. hdu 1242 Rescue(bfs)

    此刻再看优先队列,不像刚接触时的那般迷茫!这也许就是集训的成果吧! 加油!!!优先队列必须要搞定的! 这道题意很简单!自己定义优先级别! +++++++++++++++++++++++++++++++ ...

随机推荐

  1. Python爬取17吉他网吉他谱

    最近学习吉他,一张一张保存吉他谱太麻烦,写个小程序下载吉他谱. 安装 BeautifulSoup,BeautifulSoup是一个解析HTML的库.pip install BeautifulSoup4 ...

  2. java连接mysql数据库(jsp显示和控制台显示)

           很多事情,在我们没有做之前我们觉得好难,但是只要你静下心来,毕竟这些都是人搞出来的,只要你是人,那就一定可以明白. 配置:JDK1.8,MySQL5.7,eclipse:Neon Rel ...

  3. jquery mobile event

    jquery.js $(document).on("mobileinit", function() { // }); jquery.mobile.js $(document).re ...

  4. 如何设置、查看以及调试core文件

    http://blog.csdn.net/xiaoxiaoniaoer1/article/details/7740820 1.core文件的生成开关和大小限制--------------------- ...

  5. 练习C之SELECT形式的非阻塞IO

    呵呵,理解得不深,但毕竟手打全版,且无错.但select.h不知何处找头文件, 粘下来作个记录. POLL,EPOLL感觉代码类似,只是函数和系统实现不一样,,EPOLL目前最合理的.定位精确,算法复 ...

  6. asp.net 中 .ASPX 与.CS文件的关系

    .aspx文件继承自.cs文件 虽然一个 Web 窗体页由两个单独的文件组成,但这两个文件在应用程序运行时形成了一个整体.项目中所有 Web 窗体的代码隐藏类文件都被编译成由项目生成的动态链接库 (. ...

  7. thinkphp 模板替换

    具体详见tp手册. 如果需要修改模板替换映射路径. 则需: 'TMPL_PARSE_STRING'=>array( '__PUBLIC__'=>__ROOT__.'/'.APP_NAME. ...

  8. c++模板注意事项

    c++模板类 分类: C++2012-08-20 21:28 7108人阅读 评论(2) 收藏 举报 c++编译器instantiationiostreamlinker编程 c++模板类 分类: 数据 ...

  9. Python Anaconda2 (64-bit) 安装后启动jupyter-notebook默认目录更改

    看了网上很多关于更改 python notebook的,好麻烦,所以想了一招. python notebook 现在改名叫 jupyter-notebook ,被集成在Anaconda中. Anaco ...

  10. apache点NET环境

    1.首先 下载一个mod_aspdotnet-2.2.0.2006-setup-r2.msi 2.安装好后在apache的moudles目录会生成一个mod_aspdotnet.so文件 3.修改ht ...