HDU - 2612 bfs [kuangbin带你飞]专题一
分别以两个人的家作为起点,bfs求得到每个KFC最短距离。然后枚举每个KFC,求得时间之和的最小值即可。
此题不符合实际情况之处: 通过了一个KFC再去另一个KFC可以吗? 出题人都没好好想过吗?
AC代码
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn = 200 + 5; int d[2][maxn][maxn]; const int dx[] = {1,-1,0,0}; const int dy[] = {0,0,-1,1}; struct node{ int x, y; node(){ } node(int x, int y):x(x), y(y){ } }; int n, m; char G[maxn][maxn]; bool in(int x , int y){ if(x < 0 || y < 0 || x >= n || y >= m) return false; return true; } void bfs(int x, int y, int c){ queue<node>q; d[c][x][y] = 0; q.push(node(x, y)); while(!q.empty()){ node p = q.front(); q.pop(); x = p.x, y = p.y; for(int i = 0; i < 4; ++i){ int px = x + dx[i], py = y + dy[i]; if(!in(px, py) || G[px][py] == '#' || d[c][px][py] != -1) continue; d[c][px][py] = d[c][x][y] + 1; //if(G[px][py] != 'Y' && G[px][py] != 'M' && G[px][py] != '@') q.push(node(px, py)); } } } int main(){ while(scanf("%d%d", &n, &m) == 2){ memset(d, -1, sizeof(d)); for(int i = 0; i < n; ++i) scanf("%s", G[i]); for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j){ if(G[i][j] == 'Y') bfs(i, j, 0); else if(G[i][j] == 'M') bfs(i, j, 1); } int ans = 1 << 30; for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j){ if(G[i][j] == '@' && d[1][i][j] != -1 && d[0][i][j] != -1){ ans = min(ans, d[0][i][j] + d[1][i][j]); } } printf("%d\n", ans * 11); } return 0; }
如有不当之处欢迎指出!
HDU - 2612 bfs [kuangbin带你飞]专题一的更多相关文章
- HDU - 3533 bfs [kuangbin带你飞]专题二
看了好久的样例才看懂. 题意:有一个人要从(0,0)走到(n,m),图中有k个碉堡,每个碉堡可以向某个固定的方向每隔t秒放一次炮,炮弹不能穿越另一个碉堡,会被阻挡.人在移动的过程中不会被炮弹打到,也就 ...
- HDU - 1495 bfs [kuangbin带你飞]专题一
模拟倒水的过程,每次可以把第i个杯子的水向第j个杯子里面倒,这可能出现新的状态,不停的更新状态,指导某两个杯子的水等于S/2说明找到答案,如果所有状态搜索完毕仍然不能均分,则退出. 注意:如果S是奇数 ...
- HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二
思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...
- HDU - 1241 dfs or bfs [kuangbin带你飞]专题一
8个方向求联通块,经典问题. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #includ ...
- UVA - 11624 多点bfs [kuangbin带你飞]专题一
题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人 ...
- POJ - 2251 bfs [kuangbin带你飞]专题一
立体bfs,共有六个方向: const int dx[] = {0,0,1,-1,0,0}; const int dy[] = {1,-1,0,0,0,0}; const int dz[] = {0, ...
- FZU - 2150 bfs [kuangbin带你飞]专题一
题意:两个人玩很变态的游戏,将一个草坪的某两个点点燃,点燃的草坪可以向上下左右四个方向扩散,问能否将整块草坪上面的草都点燃.如果能,输出最短时间(^_^他们就能玩更变态的游戏了),如果不能,输出-1. ...
- POJ - 3414 bfs [kuangbin带你飞]专题一
状态搜索,每种状态下面共有六种选择,将搜索到的状态保存即可. d[i][j]表示状态A杯中水i升,B杯中水j升,总状态数量不会超过A杯的容量 * B杯的容量. AC代码 #include<cst ...
- POJ - 3984 bfs [kuangbin带你飞]专题一
bfs搜索过程中将路径保存下即可. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #inc ...
随机推荐
- C# MongoDB
一.搭建Mongodb 副本集 副本集中有三个角色: 主节点:所有副节点的数据均来自于主节点,并且只能对主节点进行读写操作.副节点:数据来自于主节点,可以进行读取操作,但是不能进行写操作.仲裁者:不含 ...
- 【转】 C++易混知识点2. 函数指针和指针函数的区别
我们时常在C++开发中用到指针,指针的好处是开销很小,可以很方便的用来实现想要的功能,当然,这里也要涉及到指针的一些基本概念.指针不是基本数据类型,我们可以理解他为一种特殊类型的对象,他占据一定空间, ...
- 常用Nagios配置命令
cd /usr/local/nagios/etc vim nagios.cfg /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios ...
- Ajax发送数据
- spring之构造注入
第一种:通过构造name和value属性(不常用) <!-- userAction --> <bean id="userAction" class="c ...
- SQL Server判断是否满足日期格式(YYYYMMDD)以及中文等判断,格式化为YYYY-MM-DD
SQL Server判断是否满足日期格式(YYYYMMDD)以及中文等判断: 在做sql数据的正确性审核中,需要判断数据是否满足日期格式,网上找不到相关的资料,于是自己花了半天写了一个简单的函数 具体 ...
- 基于线程池的线程管理(BlockingQueue生产者消费者方式)实例
1.线程池管理类: public class ThreadPoolManager { private static ThreadPoolManager instance = new ThreadPoo ...
- 单元测试系列:Mock工具之Mockito实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...
- Base-64编码介绍
Base-64编码保证了二进制数据的安全 Base-64编码可以将任意一组字节转换为较长的常见文本字符序列,从而可以合法地作为首部字段值.Base-64编码将用户输入或二进制数据,打包成一种安全格式, ...
- 夏令营讲课内容整理 Day 6 Part 1.
Day6讲了三个大部分的内容. 1.STL 2.初等数论 3.倍增 Part1主要与STL有关. 1.概述 STL的英文全名叫Standard Template Library,翻译成中文就叫标准 ...