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了吧,很明显是最短路径问题,不过又加了一个条 ...
随机推荐
- Qt核心剖析:信息隐藏(三篇)
http://devbean.blog.51cto.com/448512/335550 http://devbean.blog.51cto.com/448512/325581 http://devbe ...
- ios上禁止输入表情
ios上禁止输入表情 + (BOOL)isContainsEmoji:(NSString *)string { __block BOOL isEomji = NO; [string enumerate ...
- What’s new in Spark 1.2.0
What's new in Spark 1.2.0 1.2.0 was released on 12/18, 2014 在2014年5月30日公布了Spark 1.0 和9月11日公布了Spark1. ...
- Android智能手机屏蔽电话与屏蔽安装软件功能
近期做一些项目.须要对手机进行屏蔽自己的固有的功能.在此记录. Android屏蔽电话功能主要是卸载掉Phone.apk. 屏蔽安装软件功能主要是卸载掉PackageInstall.apk 以下以三星 ...
- JS中setTimeout()的使用方法具体解释
1. SetTimeOut() 1.1 SetTimeOut()语法样例 1.2 用SetTimeOut()运行Function ...
- []: secureCRT连接ubuntu问题- The remote system refused the connection
secureCRT连接ubuntu问题- The remote system refused the connection http://jxyang.iteye.com/blog/1484915 解 ...
- Ch05 视图模型
5.1 什么是视图模型 5.1.1 在线商店示例 5.1.2 建立视图模型 5.1.3 交付表现模型 5.1.4 ViewData.Model 5.2 表现用户输入 5.2.1 设计(输 ...
- Windows Phone 8初学者开发的翻译终于过半
从2013年7月19日开始,到2013年12月9日,一共花了143天时间完成了18篇Windows Phone 8初学者开发的翻译,还剩下17篇文章需要翻译,看到了完成的希望! I love Wind ...
- 基于visual Studio2013解决C语言竞赛题之1048打印矩阵
题目 解决代码及点评 /* 48. 找规律填写N×N方阵.如N=8时, 其方阵为: */ #include <stdio.h> #include <stdlib.h& ...
- Linux下sed,awk,grep,cut,find学习笔记
awk awk是一种程序语言,对文档资料的处理具有很强的功能.awk擅长从格式化报文或从一个大的文本文件中抽取数据. awk的命令格式为: awk [-F filed-separator] “comm ...