原题:
传送门
题意:
#的格子不能走;. 的可以走,要1个单位时间;x 的格子也可以走,不过要2个单位时间,求从r到a的最小时间
思路:
bfs搜索
注意:
不同于传统的bfs,这次走一个格子的时间可以是1或2,所以使用priority_queue<node>来存储,记得再结构体内重载<运算符,使得默认大根堆的优先队列变为小根堆

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>using namespace std;int dr[4][2]={1,0,0,1,-1,0,0,-1};
bool vis[202][202];
char mp[203][203];
int n, m;
int nx, ny;
struct node {int x, y, step;friend bool operator < (node a, node b) {return a.step>b.step;}
};
priority_queue<node> q;
node nd;int bfs(int x, int y) {nd.x=x;nd.y=y;nd.step=0;q.push(nd);vis[x][y]=true;while (!q.empty()) {node u=q.top();q.pop();if (mp[u.x][u.y] == 'a') {return u.step;}for (int i=0;i<4;i++) {nx = u.x + dr[i][0];ny = u.y + dr[i][1];if ((nx>=0&&nx<n) && (ny>=0&&ny<m) && !vis[nx][ny] && mp[nx][ny]!='#') {nd.x=nx;nd.y=ny;nd.step = u.step + (mp[nx][ny]=='x'?2:1);q.push(nd);vis[nx][ny] = true;}}}return -1;
}
void init() {while (!q.empty()) {q.pop();}
}
int main()
{int fx, fy;while (cin>>n>>m) {init();for (int i=0;i<n;i++)for (int j=0;j<m;j++) {vis[i][j]=false;cin>>mp[i][j];if (mp[i][j] == 'r') {fx = i;fy = j;}}int ans=bfs(fx, fy);if (ans==-1) {cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;} else {cout<<ans<<endl;}}return 0;
}

HDU - 1242相关推荐

  1. HDU 1242 Rescue BFS+优先队列

    题目链接:点击打开链接http://acm.hdu.edu.cn/showproblem.php?pid=1242 #include <stdio.h> #include <stri ...

  2. *【HDU - 1242 】 Rescue (反向dfs,或bfs)

    题干: Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N ...

  3. HDU 1242 Rescue

    bfs问题. Angel有被关在监狱,她有非常多朋友要去救她. #表示墙,.表示路,x表示警卫,r表示她的朋友. 因为可能有非常多朋友,可是Angel仅仅有一个,所以搜索起点设为Angel.仅仅要找到 ...

  4. (step4.2.3)hdu 1242(Rescue——BFS)

    题目大意:friends用最短的时间去救angel '.'表示通道 '#'表示墙壁 'x'表示guard.走一格要一单位时间,杀死一个guard要一个单位时间. 如果可以救求最短时间,否则按要求输出 ...

  5. 优先队列详解(转载)

    优先队列:顾名思义,首先它是一个队列,但是它强调了"优先"二字,所以,已经不能算是一般意义上的队列了,它的"优先"意指取队首元素时,有一定的选择性,即根据元素的 ...

  6. 优先队列详解priority_queue .RP

    优先队列:顾名思义,首先它是一个队列,但是它强调了"优先"二字,所以,已经不能算是一般意义上的队列了,它的"优先"意指取队首元素时有一定的选择性,即根据元素的属 ...

  7. 杭电OJ分类题目(1)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(1) HDU Introduction HDU ...

  8. 优先队列(priority_queue)

    优先队列:顾名思义,首先它是一个队列,但是它强调了"优先"二字,所以,已经不能算是一般意义上的队列了,它的"优先"意指取队首元素时,有一定的选择性,即根据元素的 ...

  9. [转] HDU 题目分类

    转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...

最新文章

  1. python中rename函数_python os.rename(…)不起作用!
  2. 安装GCC-8.3.0及其依赖
  3. 【Python】Flask框架系列(三):session和cookie操作、get/post请求、钩子函数
  4. linux匿名页 文件页,文件页和匿名页
  5. 解决ffmpeg拉流转发频繁丢包问题max delay reached. need to consume packet
  6. web.config中配置数据库连接的两种方式
  7. 《一》Java EE
  8. DNN/LSTM/Text-CNN情感分类实战与分析
  9. SSM框架中出现的几种注解的理解
  10. 为什么像王者荣耀这样的游戏Server不愿意使用微服务?
  11. 软件测试用例设计包括哪些类型?
  12. 在注视之外:对于认知和认知发展研究,眼动追踪还能揭示什么?
  13. linux定时任务生效_linux设置定时任务
  14. 开课吧mysql课件百度云_开课吧第四期Web全栈课程分享
  15. Mac finder 文件剪切方法 怎么剪切/移动 剪切快捷键
  16. Docker 映射端口telnet不通
  17. Dubbo (五) ---------监控中心
  18. RN cannot add a child that doesnot have a YogoNode to a parent without a measure function!
  19. javascript解数独LeetCod-37
  20. JAVA学习笔记(三十一)-电影系统案例

热门文章

  1. 宝讯网捷:拼多多团长佣金怎么领?
  2. c语言勾股数编程,C++勾股数公式讲解
  3. 外媒曝光:小米新奇想专利让超广角拍摄不失真
  4. 数据驾驶舱只是面子工程?它的真正作用你根本就不了解
  5. 博雅互动 php 是否加班,【博雅互动工资|博雅互动待遇怎么样】-看准网
  6. 用计算机投屏图片,手机投屏Windows7电脑图文教程
  7. ArcGIS入门教程(矢量编辑工作流程)
  8. 认证授权那点事儿 —— OAuth 2.0
  9. 华为电脑浏览器主页被劫持
  10. oracle 优化 io占用,oracle 整体性能优化概述之五:调整磁盘io