1689: 营救小明(bfs+priority_queue逆向思维)
1689: 营救小明
时间限制: 1 Sec 内存限制: 32 MB
[提交][状态][讨论版]
题目描述
一天,小明梦见自己被外星人抓走了,他被关在了一座监狱里,这座监狱形如N*M(N,M<=200)的矩阵,监狱里有墙、道路和守卫。
小明的小伙伴们得知他被外星人抓走后想要把他救出来,他们要试图接近关押小明的那间房间。当他们经过有守卫的房间时他们必须干掉守卫后继续前进,而当遇到墙的时候则只能绕道。他们只能向上下左右四个方向移动,每移动一次耗时1分钟,干掉一个守卫也耗时1分钟。不必担心,他们足够强壮,可以干掉任何一个守卫。
现在请你计算出他们当中最快到达小明所在房间的那个人最短需要花费多长时间。
输入
输入包含多组测试数据。
每组输入的第一行是两个整数N和M(N,M<=200)。
接下来N行,每行输入M个字符。“.”代表道路,可以通行。“#”代表墙。“g”代表守卫。“m”代表小明所在的房间。“f”代表每一个小明的小伙伴,可能有多个小伙伴一起来救他。
输出
对于每组输入,输出小伙伴当中最快到达小明所在房间的那个人最短需要花费多长时间。如果所有小伙伴都无法到达小明所在的房间的话,请输出“Poor Xiaoming”(引号不输出)。
样例输入
7 8
#.#####.
#.m#..f.
#..#g...
..#..#.#
#...##..
.#......
........
样例输出
13
提示
来源
/*
逆向思维。
让小明去找朋友,最先找的朋友所用的时间到就是ans
同时需要用优先队列,时间少的优先
*/
#include <bits/stdc++.h>using namespace std;
typedef long long LL;
const LL INF = 0x3f3f3f3f;
char mp[205][205];
struct Map
{int x,y;LL step;bool operator<(const Map a)const{return step>a.step;}
} s;
int n,m;
LL ans;
bool vis[205][205];
int step_x[]={-1,1,0,0},step_y[]={0,0,-1,1};
LL bfs(Map s)
{priority_queue<Map>q;vis[s.x][s.y] = true;q.push(s);while(!q.empty()){Map t = q.top();q.pop();if(mp[t.x][t.y]=='f'){return t.step;}Map tt;for(int i = 0; i < 4; i++){tt.x = t.x + step_x[i];tt.y = t.y + step_y[i];if(tt.x<0||tt.x>=n||tt.y<0||tt.y>=m) continue;if(mp[tt.x][tt.y]!='#'&&!vis[tt.x][tt.y]){if(mp[tt.x][tt.y]=='g'){tt.step = t.step + 2;}else{tt.step = t.step + 1;}vis[tt.x][tt.y] = true;q.push(tt);}}}return INF;
}
int main()
{while(~scanf("%d%d",&n,&m)){for(int i = 0; i < n; i++){scanf("%s",mp[i]);for(int j = 0; j < m; j++){vis[i][j] = false;if(mp[i][j]=='m'){s.x = i;s.y = j;s.step = 0;}}}ans = bfs(s);if(ans == INF){printf("Poor Xiaoming\n");}else{printf("%lld\n",ans);}}return 0;
}
1689: 营救小明(bfs+priority_queue逆向思维)相关推荐
- bzoj 2464: 中山市选[2009]小明的游戏(BFS)
2464: 中山市选[2009]小明的游戏 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 963 Solved: 394 [Submit][Sta ...
- P4554 小明的游戏(双端bfs)
P4554 小明的游戏https://www.luogu.com.cn/problem/P4554 #pragma warning(disable:4996) #include <iostrea ...
- HDU - 小明系列故事——捉迷藏(BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others) Memory Limi ...
- hdu4528小明系列故事——捉迷藏(bfs)
小明系列故事--捉迷藏 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- nyoj 55 懒省事的小明
懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆 ...
- nyoj 55 懒省事的小明 优先队列 multiset 还有暴力
懒省事的小明 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不 ...
- 【qduoj - 1121】小明的贪心题(Dijkstra最短路 + 最短路条数)
题干: 小明的贪心题 描述 小明来到青岛上学已经一年了,他给青岛这座城市画了一张地图.在这个地图上有n个点,小明的起始点为1号点,终点为n号点,并且地图上的所有边都是单向的.小明知道从i号点到j号点的 ...
- 51nod3107 小明爱宝石
3107 小明爱宝石 小明想要创造n种魔法宝石.小明可以用ai的魔力值创造一棵第i种魔法宝石,或是使用两个宝石合成另一种宝石(不消耗魔力值).请你帮小明算出合成某种宝石的所需的最小花费. 输入 首先一 ...
- 51nod3241 小明和他的同学们
3241 小明和他的同学们 小明在全球数学竞赛获得了冠军,他很高兴,所以他想请他的同学吃巧克力,但是小明每天都很忙,只有x分钟的时间可以宴请同学们,现在小明有m个巧克力,小明要请n个同学吃巧克力,每个 ...
最新文章
- 【LeetCode】3Sum Closest 解题报告
- java 项目使用 ajaxfileupload
- Windows 8系统平台上应用软件安装心得
- OpenCV rectangle
- Silverlight与Flash在FF中的一些注意点
- BeanPropertyRowMapper使用注意事项
- 存储Tensorflow训练网络的参数
- 学习ASP.NET Core Razor 编程系列六——数据库初始化
- `find -name`模式匹配多个模式
- [渝粤教育] 广东-国家-开放大学 21秋期末考试国际私法10216k1
- github仓库的ssh_gitHub注册账户以及创建仓库
- OpenDRIVE:学习文档
- Intel i5-7200U (3100MHZ),1*8GB(DDR4 2666) 在 Aida64 V5.97.4600 的测试结果
- 电池SOC估计-EKF UKF
- 华为硬件工程师社招机考题库_华为硬件工程师笔试题
- Ubuntu恢复官方默认源
- webview无法播放视频
- fx3u4ad一adp说明书_FX3U-4AD-ADP使用手册三菱FX3U-4AD-ADP用户手册 - 三菱
- 荒野行动计算机高考题,叮咚,这里有一份荒野行动强迫症测试试卷请查收~
- Unity 屏幕中显示区域截图
热门文章
- 如何覆盖上一次commit_第一次漂冰雪就上难度 “小白”如何在冰雪中漂明白中置后驱...
- 部署MongoDB集群
- 额,看房没戴头盔,损失二十万 。。。
- 前端面试技巧和注意事项_我的前端面试总结(套路篇)
- qt自定义插件creator不显示_让Qt Creator更懂我们的自定义模块
- mysql服务器多线程模型_mysql-线程模型
- php 云计算 源码,蜂巢平台基于PHP5.3云计算应用框架 v0.4.0.1
- Django中自定义过滤器的使用
- 【单词】常见单词含义的辨异(emulator/simulator、hardware/firmware)
- Mac系统的终端显示git当前分支