HDU 2612 - Find a way - [BFS]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612
Problem Description
Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki.
Yifenfei’s home is at the countryside, but Merceki’s home is in the center of city. So yifenfei made arrangements with Merceki to meet at a KFC. There are many KFC in Ningbo, they want to choose one that let the total time to it be most smallest.
Now give you a Ningbo map, Both yifenfei and Merceki can move up, down ,left, right to the adjacent road by cost 11 minutes.
Input
The input contains multiple test cases.
Each test case include, first two integers n, m. (2<=n,m<=200).
Next n lines, each line included m character.
‘Y’ express yifenfei initial position.
‘M’ express Merceki initial position.
‘#’ forbid road;
‘.’ Road.
‘@’ KCF
Output
For each test case output the minimum total time that both yifenfei and Merceki to arrival one of KFC.You may sure there is always have a KFC that can let them meet.
Sample Input
4 4
Y.#@
....
.#..
@..M
4 4
Y.#@
....
.#..
@#.M
5 5
Y..@.
.#...
.#...
@..M.
#...#
Sample Output
66
88
66
题意:
两人分别从 "Y" 和 "M" 出发,在地图上走,要找一个 "@" 碰头,每走一格花费时间 $11$ 分钟,求最短的碰头时间。
题解:
以两个人分别为起点做BFS,求出两人到每家KFC的各自花费的时间。
对全部KFC维护两人到达时间之和的最小值即为答案。
AC代码:
- #include<bits/stdc++.h>
- using namespace std;
- typedef pair<int,int> pii;
- const int MAX=;
- const int dx[]={,,,-};
- const int dy[]={,,-,};
- int n,m;
- char mp[MAX][MAX];
- pii Y,M;
- int KFCcnt;
- map<pii,int> KFC;
- int Time[][MAX*MAX];
- queue<pii> Q;
- int d[MAX][MAX];
- void bfs(pii st,int t)
- {
- memset(Time[t],0x3f,sizeof(Time[t]));
- memset(d,-,sizeof(d));
- Q.push(st); d[st.first][st.second]=;
- while(!Q.empty())
- {
- pii now=Q.front(); Q.pop();
- if(mp[now.first][now.second]=='@')
- Time[t][KFC[now]]=d[now.first][now.second];
- for(int k=;k<;k++)
- {
- pii nxt=now; nxt.first+=dx[k], nxt.second+=dy[k];
- if(mp[nxt.first][nxt.second]=='#') continue;
- if(~d[nxt.first][nxt.second]) continue;
- Q.push(nxt);
- d[nxt.first][nxt.second]=d[now.first][now.second]+;
- }
- }
- }
- int main()
- {
- for(int i=;i<MAX;i++) mp[i][]=mp[][i]='#';
- while(cin>>n>>m)
- {
- KFCcnt=; KFC.clear();
- for(int i=;i<=n;i++)
- {
- scanf("%s",mp[i]+), mp[i][m+]='#';
- for(int j=;j<=m;j++)
- {
- if(mp[i][j]=='@') KFC[make_pair(i,j)]=++KFCcnt;
- if(mp[i][j]=='Y') Y=make_pair(i,j);
- if(mp[i][j]=='M') M=make_pair(i,j);
- }
- }
- for(int j=;j<=m+;j++) mp[n+][j]='#';
- bfs(Y,);
- bfs(M,);
- int res=0x3f3f3f3f;
- for(int i=;i<=KFCcnt;i++) res=min(res,Time[][i]+Time[][i]);
- printf("%d\n",res);
- }
- }
HDU 2612 - Find a way - [BFS]的更多相关文章
- HDU 2612 Find a way bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=2612 bfs两次就可将两个人到达所有kfc的时间求出,取两人时间之和最短的即可,这个有点不符合实情,题目应该出两 ...
- HDU 2612 Find a way BFS,防止超时是关键
之前我写的时候是:每找到一个‘@’就广搜一次,如果这样写有多少个‘@’就会广搜几次,这样就超时了.我队友告诉我应该打个表,这个方法确实不错.因为'Y'和'M'是唯一的,我通过这两个点分别广搜一次,对所 ...
- HDU 2612 (2次BFS,有点小细节)
Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
- BFS(最短路) HDU 2612 Find a way
题目传送门 /* BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值 */ /***************************************** ...
- HDU 2612 Find a way(双向bfs)
题目代号:HDU 2612 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 Find a way Time Limit: 3000/1000 M ...
- HDU 2612 Find a way(找条路)
HDU 2612 Find a way(找条路) 00 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU 2717 Catch That Cow --- BFS
HDU 2717 题目大意:在x坐标上,农夫在n,牛在k.农夫每次可以移动到n-1, n+1, n*2的点.求最少到达k的步数. 思路:从起点开始,分别按x-1,x+1,2*x三个方向进行BFS,最先 ...
- HDU - 2612 Find a way 【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2612 题意 有两个人 要去一个城市中的KFC 一个城市中有多个KFC 求两个人到哪一个KFC的总时间最 ...
随机推荐
- Python并行实例
任务 def single(): # 单进程单线程实现 s = 0 for i in range(1, N): s += math.sqrt(i) return s 结论 Python多线程无法利用多 ...
- 【转】关于提示can't load package 'xxx.bpl.' 错误问题的解决方法
转自: http://blog.sina.com.cn/s/blog_44fa172f0102v9x3.html 'xxx.bpl'包实际存在, 路径并且正确. 但是总提示'can ...
- Android 网络编程之最新OKHTTP:3.9.0
本节前言 本来是想围绕着HttpClient讲解的,后来发先Android4.4之后okhttp代替了hc,所以将不再讲解hc okhttp的简单使用,主要包含: 一般的get请求 一般的post请求 ...
- The thumbprint of same asymmetric key is not same in 'SQL Server Connector for Microsoft Azure Key Vault' 1.0.4.0 and 'SQL Server Connector for Microsoft Azure Key
https://support.microsoft.com/en-us/help/4470999/db-backup-problems-to-sql-server-connector-for-azur ...
- SQL Server 2016新特性:Live Query Statistics
SSMS可以提供可以查看正在执行的计划.live query plan可以查看一个查询的执行过程,从一个查询计划操作到另外一个查询计划操作.live query plan提供了整体的查询运行进度和操作 ...
- JavaWeb过滤器.监听器.拦截器-原理&区别(转)
1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的 ...
- URLSearchParams和axios的post请求(防忘记)
import axios from 'axios' Vue.prototype.axios = axios mounted () { let params = new URLSearchParams( ...
- Smart Link
Smart Link通过两个接口相互配合工作来实现功能.这样的一对接口组成了一个Smart Link组.为了区别一个Smart Link组中的两个接口,我们将其中的一个叫做主接口,另一个叫做从接口.同 ...
- 【转】WPF Template模版之DataTemplate与ControlTemplate(一)
WPF系统不但支持传统的Winfrom编程的用户界面和用户体验设计,更支持使用专门的设计工具Blend进行专业设计,同时还推出了以模板为核心的新一代设计理念. 1. 模板的内涵 作为表现形式,每个控件 ...
- Cannot create a session after the response has been committed
有时候在操作Session时,系统会抛出如下异常 java.lang.IllegalStateException: Cannot create a session after the response ...