题目链接: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]的更多相关文章

  1. HDU 2612 Find a way bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=2612 bfs两次就可将两个人到达所有kfc的时间求出,取两人时间之和最短的即可,这个有点不符合实情,题目应该出两 ...

  2. HDU 2612 Find a way BFS,防止超时是关键

    之前我写的时候是:每找到一个‘@’就广搜一次,如果这样写有多少个‘@’就会广搜几次,这样就超时了.我队友告诉我应该打个表,这个方法确实不错.因为'Y'和'M'是唯一的,我通过这两个点分别广搜一次,对所 ...

  3. HDU 2612 (2次BFS,有点小细节)

    Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...

  4. HDU.2612 Find a way (BFS)

    HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...

  5. BFS(最短路) HDU 2612 Find a way

    题目传送门 /* BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值 */ /***************************************** ...

  6. 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 ...

  7. HDU 2612 Find a way(找条路)

    HDU 2612 Find a way(找条路) 00 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)   Problem  ...

  8. 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,最先 ...

  9. HDU - 2612 Find a way 【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2612 题意 有两个人 要去一个城市中的KFC 一个城市中有多个KFC 求两个人到哪一个KFC的总时间最 ...

随机推荐

  1. 【C++】C++中的字符和字符串

    目录结构: contents structure [-] 定义和初始化string string对象上的操作 处理string对象中的字符 C风格字符串 标准库类型string表示可变长的字符序列,使 ...

  2. Data Model for Certificate

  3. Deep Dive into Spark SQL’s Catalyst Optimizer(中英双语)

    文章标题 Deep Dive into Spark SQL’s Catalyst Optimizer 作者介绍 Michael Armbrust, Yin Huai, Cheng Liang, Rey ...

  4. Atitit s2018.5 s5 doc list on com pc.docx  v2

    Atitit s2018.5 s5  doc list on com pc.docx  Acc  112237553.docx Acc Acc  112237553.docx Acc baidu ne ...

  5. Ajax 请求头中常见content-type

    四种常见的 POST 提交数据方式 HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范.规范把 HTTP 请求分为三个部分:状态行.请求头.消息主体.协议规定 POST ...

  6. select 与 time.After 配合使用的问题

    今天在工作中发现了一个有趣的现象. 在一个select中设定了两个定时器,本来预计哪个定时器到达就运行相应指令的,但是发现最终只有时间最短的定时器一直得到执行,其它定时器完全没有得到执行. packa ...

  7. Maven项目:Malformed POM expected START_TAG or END_TAG ........

    今天在执行maven命令 mvn assembly:assembly -Dmaven.test.skip=true的时候报了个错,大概是Malformed POM expected START_TAG ...

  8. 字节输入流:io包中的InputStream为所有字节输入流的父类。

    字节输入流:io包中的InputStream为所有字节输入流的父类. Int read();读入一个字节(每次一个): 可先使用new  byte[]=数组,调用read(byte[] b) read ...

  9. 自己动手实现RPC

    一.需求:用户管理系统(UMS),仓库管理系统(WMS),订单管理系统(OMS) 现在OMS有一张订单表:[订单id,用户id,商品id,订单状态,订单时间],需要在客户端展示此订单对应的用户详情和商 ...

  10. Qt编写自定义控件9-导航按钮控件

    前言 导航按钮控件,主要用于各种漂亮精美的导航条,我们经常在web中看到导航条都非常精美,都是html+css+js实现的,还自带动画过度效果,Qt提供的qss其实也是无敌的,支持基本上所有的CSS2 ...