hdoj 1242 Rescue
Rescue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 19985 Accepted Submission(s):
7110
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.)
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.
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."
/*
题意 :公主被抓(为什么公主老是被魔王抓,烂梗),我要去救公主 (其实我不想救,心累)
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的更多相关文章
- BFS HDOJ 1242 Rescue
题目传送门 题意:从r走到a,遇到x多走一步,问最小走到a的步数 分析:因为r有多个,反过来想从a走到某个r的最小步数,简单的BFS.我对这题有特殊的感情,去年刚来集训队时肉鸽推荐了这题,当时什么都不 ...
- 【HDOJ】1242 Rescue
BFS+优先级队列. #include <iostream> #include <cstdio> #include <cstring> #include <q ...
- HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)
Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...
- hdu 1242 Rescue
题目链接:hdu 1242 这题也是迷宫类搜索,题意说的是 'a' 表示被拯救的人,'r' 表示搜救者(注意可能有多个),'.' 表示道路(耗费一单位时间通过),'#' 表示墙壁,'x' 代表警卫(耗 ...
- HDOJ并查集题目 HDOJ 1213 HDOJ 1242
Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...
- HDU 1242 Rescue (BFS(广度优先搜索))
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- hdu 1242 Rescue(bfs)
此刻再看优先队列,不像刚接触时的那般迷茫!这也许就是集训的成果吧! 加油!!!优先队列必须要搞定的! 这道题意很简单!自己定义优先级别! +++++++++++++++++++++++++++++++ ...
随机推荐
- Docker容器中运行ASP.NET Core
在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...
- windows store app 拷贝文件到pc目录
(function () { "use strict"; WinJS.Binding.optimizeBindingReferences = true; var app = Win ...
- iOS最新上线流程+续费 2015-7-20更新
一.程序上线前准备 确认图标是否⻬全,应⽤的icon图标 在以前图⽚片直接命名 为icon就可以了,在xcode5以后,苹果加 ⼊入了images.xcasset这个⽂文件夹,所有的 图标全都在这⾥里 ...
- 让Eclipse使用新版本的JRE
更新到新的 Mac OS X 再打开Eclipse 编译程序会报错, Exception in thread "main" java.lang.UnsupportedClassVe ...
- MySql排序性能对比
- linux c/c++ GDB教程详解
学习使用了GDB一段时间后,发现它真的好强大!好用! GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在U ...
- 《深入理解linux内核》第三章 进程
进程的七种状态 在内核源码的 include/linux/sched.h文件中: task_struct的status可表示 #define TASK_RUNNING 0 #define TASK_I ...
- AFNetworking 2.0 获取json数据时,返回 NSLocalizedDescription=Request failed: unacceptable content-type: text/html, 解决方法.
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSe ...
- memcached实例(enyim.com Memcached Client)
在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里).下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做daem ...
- Git分支管理的基本操作
首先从远端版本库clone下来一个全新的库: git clone username@xxx:/xxx/xxx.git 此时clone下来的,只是master分支,没有其他分支. 查看分支: git b ...