HDU 1242——Rescue(优先队列)
题意:
一个天使a被关在迷宫里,她的很多小伙伴r打算去救她。求小伙伴就到她须要的最小时间。在迷宫里有守卫。打败守卫须要一个单位时间。假设碰到守卫必须要杀死他
思路:
天使仅仅有一个,她的小伙伴有非常多,所以能够让天使找她的小伙伴,一旦找到小伙伴就renturn。时间小的优先级高。优先队列搞定
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define fx(i,xi,n) for(int i=xi;i<n;++i)
#define ms(s,i) memset(s,i,sizeof (s)) using namespace std;
int dir[4][2]={0,1,0,-1,1,0,-1,0},vis[210][210],flag,ans,n,m;
char map[210][210];
bool check(int x,int y){if(x>=0&&x<n&&y>=0&&y<m&&!vis[x][y]&&map[x][y]!='#')return true;return false;}
struct pp{int x,y,s;friend bool operator<(const pp a,const pp b){return a.s>b.s;}};
void bfs(int x,int y)
{
priority_queue<pp> q;
pp a,b;
a.x=x;a.y=y;a.s=0;ms(vis,0);vis[x][y]=1;
q.push(a);
while(!q.empty()){
a=q.top();q.pop();
// cout<<a.x<<" "<<a.y<<map[a.x][a.y]<<endl;
fx(i,0,4){
b.x=a.x+dir[i][0];b.y=a.y+dir[i][1];
if(check(b.x,b.y)){
vis[b.x][b.y]=1;b.s=a.s+1;
if(map[b.x][b.y]=='r'){flag=1;ans=b.s;return ;}
if(map[b.x][b.y]=='x') {b.s++;}
q.push(b);
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF){
ms(map,'#');
fx(i,0,n) scanf("%s",map[i]);
int sx,sy;
fx(i,0,n)fx(j,0,m){if(map[i][j]=='a'){sx=i;sy=j;}}
flag=ans=0;
bfs(sx,sy);
if(flag) cout<<ans<<endl;
else cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
}
return 0;
}
HDU 1242——Rescue(优先队列)的更多相关文章
- hdu 1242 Rescue
题目链接:hdu 1242 这题也是迷宫类搜索,题意说的是 'a' 表示被拯救的人,'r' 表示搜救者(注意可能有多个),'.' 表示道路(耗费一单位时间通过),'#' 表示墙壁,'x' 代表警卫(耗 ...
- hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...
- HDU 1242 Rescue(优先队列)
题目来源: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description Angel was caught by ...
- HDU 1242 Rescue(BFS+优先队列)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description Angel was caught by t ...
- HDU 1242 -Rescue (双向BFS)&&( BFS+优先队列)
题目链接:Rescue 进度落下的太多了,哎╮(╯▽╰)╭,渣渣我总是埋怨进度比别人慢...为什么不试着改变一下捏.... 開始以为是水题,想敲一下练手的,后来发现并非一个简单的搜索题,BFS做肯定出 ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- HDU 1242 rescue (优先队列模板题)
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- hdu 1242 Rescue(BFS,优先队列,基础)
题目 /******************以下思路来自百度菜鸟的程序人生*********************/ bfs即可,可能有多个’r’,而’a’只有一个,从’a’开始搜,找到的第一个’r ...
- HDU 1242 Rescue (BFS+优先队列)
题意:X代表卫兵,a代表终点,r代表起始点,.代表路,#代表墙,走过.要花费一秒,走过x要花费2秒,求从起点到终点的最少时间. 析:一看到样例就知道是BFS了吧,很明显是最短路径问题,不过又加了一个条 ...
随机推荐
- windows下apache如何完整卸载?
1.运行services.msc,在服务中停止 apache 服务.2.运行命令行程序,输入 sc delete apache,删除该服务3.删除apache文件夹.
- JavaScript实现复制功能
这两天在做Web前端时,遇到需求通过 js 实现文本复制的功能. 先不考虑浏览器的兼容性,看看各浏览器对复制功能的支持情况: 1.IE浏览器 ,解决方法有三种,代码如下: function copy( ...
- 消息对话框(MessageBox)用法介绍
在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框. 在Win32 API程序中只有MessageBox这一种用法. 而在MFC中就有三各方法: 1.调用API中的MessageBox ...
- RedHat Linux 5.5安装JDK+Tomcat并部署Java项目
与大家分享下RedHat Linux 5.5安装JDK+Tomcat并部署Java项目的步骤,希望对大家有用. 1.下载并安装jdk 虚拟机中安装RedHat Linux 5.5 64位企业版, 这里 ...
- Android中获取网页表单中的数据
MainActivity如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundl ...
- TCanvas.CopyRect方法中参数CopyMode的意义
首先看可能取值: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cmBlackness = BLACKNESS; cmDstInvert = DSTINVERT; cmMer ...
- COM实现过程
前言 COM已经成为一个必需的东西了.在我们周围,可以说处处充满了COM – 如果你是在使用WINDOWS,并在其下面编写程序的话.然而,无论你是用VC,还是使用DELPHI进行COM编程时,在大多数 ...
- 单击Android设备后退键,主屏幕键以及旋转屏幕如何影响Activity的生命周期
单击设备的后退键,相当于通知Android系统“我已完成activity的使用,现在不需要它了.”接到指令后,系统立即销毁了activity.即调用onPause()->onStop()-> ...
- MFC拆分窗口及它们之间的数据交换
源代码:http://download.csdn.net/detail/nuptboyzhb/4221531 CSplitterWnd类 CSplitterWnd类提供一个分隔器窗口的功能,分隔器窗口 ...
- python学习——截图工具编写
学习一门语言最好的方法便是实践,想要拿Python写一个截图工具,网上一搜资料果然已经很多,前辈们都已经做的很到位了.现在就一步步来学习一下: 首先学习截图整个桌面的方法,可以使用Python中的PI ...