hdu 1242 找到朋友最短的时间 (BFS+优先队列)
找到朋友的最短时间
Sample Input
7 8
#.#####. //#不能走 a起点 x守卫 r朋友
#.a#..r. //r可能不止一个
#..#x...
..#..#.#
#...##..
.#......
........
Sample Output
13
bfs+优先队列
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <queue> 5 using namespace std; 6 7 int n, m; 8 char map[205][205]; 9 int sx, sy; 10 bool flag; 11 12 struct node 13 { 14 int x , y , step ; 15 bool operator <(const node &t) const 16 { 17 return step > t.step ; 18 } 19 }; 20 21 int dx[] = {0,0,1,-1} ; 22 int dy[] = {1,-1,0,0} ; 23 24 void bfs() 25 { 26 node now , t ; 27 int i , fx ,fy ; 28 priority_queue<node> q ; 29 now.x = sx ; 30 now.y = sy ; 31 now.step = 0 ; 32 q.push(now) ; 33 map[sx][sy] = '#' ; 34 while(!q.empty()) 35 { 36 now = q.top() ; 37 q.pop() ; 38 for (i = 0 ; i < 4 ; i++) 39 { 40 fx = now.x + dx[i] ; 41 fy = now.y + dy[i] ; 42 if (fx<0 || fy<0 || fx >=n || fy >=m ||map[fx][fy] == '#') 43 continue ; 44 if (map[fx][fy] == 'r') 45 { 46 printf("%d\n" , now.step+1) ; 47 flag = 1 ; 48 return ; 49 } 50 if (map[fx][fy] == 'x') 51 { 52 t.x = fx ; 53 t.y = fy ; 54 t.step = now.step + 2 ; 55 q.push(t) ; 56 } 57 else 58 { 59 t.x = fx ; 60 t.y = fy ; 61 t.step = now.step + 1 ; 62 q.push(t) ; 63 } 64 map[fx][fy] = '#' ; 65 66 } 67 } 68 69 70 } 71 72 int main() 73 { 74 // freopen("in.txt","r",stdin) ; 75 while (scanf("%d %d" , &n , &m) !=EOF) 76 { 77 int i , j ; 78 for (i = 0 ; i < n ; i++) 79 { 80 for (j = 0 ; j < m ; j++) 81 { 82 cin>>map[i][j] ; 83 if (map[i][j] == 'a') 84 { 85 sx = i ; 86 sy = j ; 87 } 88 } 89 } 90 flag = 0 ; 91 bfs() ; 92 if (!flag) 93 printf("Poor ANGEL has to stay in the prison all his life.\n") ; 94 } 95 96 return 0 ; 97 }
View Code
dfs
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 using namespace std; 7 8 char map[220][220] ; 9 bool visit[220][220] ; 10 11 int n , m ; 12 int MIN ; 13 14 15 16 void dfs(int x , int y , int sum) 17 { 18 if (x<0 || y<0 || x>= n || y>= m) 19 return ; 20 if (map[x][y] == '#') 21 return ; 22 if (sum >= MIN) 23 return ; 24 if (visit[x][y] == 1) 25 return ; 26 if (map[x][y] == 'r') 27 { 28 if (sum < MIN) 29 MIN = sum ; 30 return ; 31 } 32 if (map[x][y] == 'x') 33 sum++ ; 34 visit[x][y] = 1 ; 35 dfs(x+1,y,sum+1) ; 36 dfs(x-1,y,sum+1) ; 37 dfs(x,y+1,sum+1) ; 38 dfs(x,y-1,sum+1) ; 39 visit[x][y] = 0 ; 40 } 41 42 int main() 43 { 44 // freopen("in.txt","r",stdin) ; 45 46 47 while (scanf("%d %d" , &n , &m) !=EOF) 48 { 49 if (n == 0 && m == 0) 50 break ; 51 memset(visit ,0 ,sizeof(visit)) ; 52 int i , j ; 53 int bx , by ; 54 int sum = 0 ; 55 56 for (i = 0 ; i < n ; i++) 57 { 58 for (j = 0 ; j < m ; j++) 59 { 60 cin>>map[i][j]; 61 if (map[i][j] == 'a') 62 { 63 bx = i ; 64 by = j ; 65 66 } 67 } 68 69 } 70 71 72 73 74 MIN = INT_MAX ; 75 dfs(bx,by,sum) ; 76 if (MIN != INT_MAX) 77 printf("%d\n" , MIN) ; 78 else 79 printf("Poor ANGEL has to stay in the prison all his life.\n") ; 80 81 } 82 83 return 0; 84 }
View Code
转载于:https://www.cnblogs.com/mengchunchen/p/4515077.html
hdu 1242 找到朋友最短的时间 (BFS+优先队列)相关推荐
- 如何用最短的时间找到初级数据分析工作?
零基础,想学习数据分析的朋友,往往有如下困惑: 网上资料一大堆,完全零基础,从哪开始入手 懒癌晚期,无法坚持完成学习 生活压力太大,想尽快找到数据分析师工作 经常遇到问题,浪费大量宝贵时间 没有项 ...
- (step4.2.3)hdu 1242(Rescue——BFS)
题目大意:friends用最短的时间去救angel '.'表示通道 '#'表示墙壁 'x'表示guard.走一格要一单位时间,杀死一个guard要一个单位时间. 如果可以救求最短时间,否则按要求输出 ...
- FBI阅人术——用最短的时间了解一个人
FBI阅人术--用最短的时间了解一个人 和陌生人第一次见面时,要如何在一开始谈话的几分钟内,了解这个人?如何和对方拉近距离?如何找到对方喜爱的话题?如何让对方愿意开口? 这都得依靠细心而入微的观察力, ...
- 肢体语言心理学+FBI阅人术(行为心理学) 用最短的时间了解一个人
肢体语言心理学 如何从站姿判断人 每个人都有自己习惯的站立姿势.美国夏威夷大学心理学家指出,不同的站姿可以显示出一个人的性格特征. 站立时习惯把双手插入裤袋的人:城府较深,不轻易向人表露内心 ...
- 如何用最短的时间学会数据分析?
零基础,想学习数据分析的朋友,往往有如下困惑: 网上资料一大堆,完全零基础,从哪开始入手 懒癌晚期,无法坚持完成学习 生活压力太大,想尽快找到数据分析师工作 经常遇到问题,浪费大量宝贵时间 没有项目经 ...
- 如何用最短的时间学会C语言,并掌握C语言的精髓所在?
点击上方蓝字关注我,了解更多咨询 及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是"让我欢喜让我忧."欢喜的是,C语言功能非常强大.应用广泛,一旦掌握了后,你就可以理直气壮地 ...
- 从起始点到目标点的最短步数(BFS)
从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在古老的魔兽传说中,有两个军团,一 ...
- SDUT OJ 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss P ...
- 【Hadoop配置】用最短的时间配置伪分布式Hbase(亲身经历)
[Hadoop配置]用最短的时间配置伪分布式Hbase(亲身经历) 目录 [Hadoop配置]用最短的时间配置伪分布式Hbase(亲身经历) 一.鸣谢 二.前言 三.从头配置Hbase (一)下载hb ...
- 【计算机网络实验】教程一:用最短的时间组建小型局域网(亲身经历)
[计算机网络实验]教程一:用最短的时间组建小型局域网(亲身经历) 目录 [计算机网络实验]教程一:用最短的时间组建小型局域网(亲身经历) 一.前言 二.准备工作 (一)认识窗口及相关组件 (二)特别需 ...
最新文章
- TensorFlow csv读取文件数据(代码实现)
- 中文自然语言处理数据集:ChineseNLPCorpus(附链接)
- [Java] HashMap 源码简要分析
- SQL基础--完整性约束
- .NET设计模式系列文章
- Unity5x编辑器的视图二
- 从一张表里选择一列加入到另一张表_【附中奖名单】| Excel妙招,数据透视表也能轻松做好排序!...
- 任务调度框架Quartz基本介绍
- 安装electron报错
- I Got a Matrix!
- python模块(6)-Pandas 简易使用教程
- java中大量匿名内部类的坏处_java中的匿名内部类总结
- laravel实现第三方qq一键登录
- 初学者python笔记(map()函数、reduce()函数、filter()函数、匿名函数)
- 小米手机拦截返回音设置不了_小米手机用户注意了!这几个超好用的功能你没用过就太可惜了...
- python数据结构6 -二叉树
- [原创]markdown语法学习(commonmark)
- php日文文件名 liunx,linux文件名乱码
- WPS无法使用复制粘贴快捷键
- php php拼接字符串函数_PHP_PHP开发中常用的字符串操作函数,1,拼接字符串 拼接字符串是最 - phpStudy...
热门文章
- MySql执行Sql语句时出现“MySqlException: Parameter ‘@maxNo‘ must be defined.”的错误
- C++ 实现反射机制(转载)
- 每天一道剑指offer-二叉树中和为某一值的路径
- java接口中有效的方法声明_在Java接口中,下列选顶中有效的方法声明是
- reids学习笔记汇总
- vue-admin-template修改登录功能
- 四川大专计算机专业排行,四川排名前三中等职业技术学院专业排行
- 疯狂python讲义这本书怎么样_疯狂Python讲义(读书笔记)
- 软件界面是怎么做出来的_可可英语这个软件怎么样?了解的人出来说说真实情况...
- css两张图片怎么合在一起_PhotoShop怎么把两张图片合成一张?怎么用ps把两张图片合成一张?...