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.

InputThe 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

OutputFor 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
注意几个地方:1.必须两个人都要访问到那个肯德基才能用它更新答案。2.Y,M,肯德基都可以经过。3.搜到肯德基以后万万不能直接continue,因为肯德基能经过。万一有
..Y.
##@#
##@#
..M.这样的数据就会WA!!没注意到这里卡了一下午QnQ
#include <bits/stdc++.h>
using namespace std;
struct node
{
int x;
int y;
int time;
};
int n,m;
char mmap[][];
int ans[][][];
bool vis[][];
const int INF=0x3f3f3f3f; int dir[][]={{,},{-,},{,},{,-}};
void bfs(int p,int sx,int sy)//p为0:Y p为1:M sx、sy为起点坐标
{
queue<node>q;
node start;
start.x=sx,start.y=sy,start.time=;
q.push(start);
vis[sx][sy]=;
while(q.size())
{
node pre;
pre=q.front();
q.pop();
if(mmap[pre.x][pre.y]=='@')
{
ans[pre.x][pre.y][p]=pre.time*;// p为0:Y花的时间 p为1:M花的时间
// continue;千万不能写continue!!!!
}
int i;
for(i=;i<=;i++)
{
int nx=pre.x+dir[i][];
int ny=pre.y+dir[i][];
if(!vis[nx][ny]&&nx>=&&nx<n&&ny>=&&ny<m&&mmap[nx][ny]!='#')
{
node nxt;
nxt.x=nx;
nxt.y=ny;
nxt.time=pre.time+;
q.push(nxt);
vis[nx][ny]=;
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(ans,,sizeof(ans));
memset(mmap,,sizeof(mmap));
memset(vis,,sizeof(vis));
int i,j;
for(i=;i<n;i++)
{
scanf("%s",mmap[i]);
}
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
if(mmap[i][j]=='Y')
{
memset(vis,,sizeof(vis));
bfs(,i,j);
}
else if(mmap[i][j]=='M')
{
memset(vis,,sizeof(vis));
bfs(,i,j);
}
}
}
int out=INF;
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
if(ans[i][j][]!=&&ans[i][j][]!=)out=min(out,ans[i][j][]+ans[i][j][]);//必须要两个人都能到kfc
}
}
cout<<out<<endl;
}
}
												

HDU2612 Find a way (跑两遍BFS)的更多相关文章

  1. Magic Potion(最大流,跑两遍网络流或者加一个中转点)

    Magic Potion http://codeforces.com/gym/101981/attachments/download/7891/20182019-acmicpc-asia-nanjin ...

  2. 求树的直径【两遍BFS】

    两遍BFS.从任意一个点出发,第一遍可以找到直径的一端,从这端出发即可找到另外一端. 证明:从U点出发,到达V[画个图便清晰了] 1.如果U在直径上,则V一定是直径的一个端点. 2.如果U不在直径上. ...

  3. 洛谷P1073最优贸易(跑两遍dij)

    题目描述 CC C国有n n n个大城市和m mm 条道路,每条道路连接这 nnn个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 mmm 条道路中有一部分为单向通行的道路,一部分为 ...

  4. POJ3268 Silver Cow Party (建反图跑两遍Dij)

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...

  5. CSU - 2031 Barareh on Fire (两层bfs)

    传送门: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2031 Description The Barareh village is on f ...

  6. P3119 [USACO15JAN]草鉴定Grass Cownoisseur 分层图或者跑两次最长路

    https://www.luogu.org/problemnew/show/P3119 题意 有一个有向图,允许最多走一次逆向的路,问从1再走回1,最多能经过几个点. 思路 (一)首先先缩点.自己在缩 ...

  7. 系统警告,Bronya请求支援(两遍最短路)

    系统警告,Bronya请求支援 Description 休伯利安号的一行人来到了由逆熵镇守的前文明遗迹[海渊城],他们准备用巨大的传送装置[海渊之眼]进入量子之海,寻找丢失的渴望宝石.然而在行动前夜爱 ...

  8. UVa 11624,两次BFS

    题目链接:http://vjudge.net/contest/132239#problem/A 题目链接:https://uva.onlinejudge.org/external/116/11624. ...

  9. HDU5886 Tower Defence 【两遍树形dp】【最长链预处理】

    题意:N个点的一棵带权树.切掉某条边的价值为切后两树直径中的最大值.求各个边切掉后的价值和(共N-1项). 解法一: 强行两遍dp,思路繁琐,维护东西较多: dis表示以i为根的子树的直径,dis2表 ...

随机推荐

  1. selenium-JavaScript的处理

    JavaScript的处理 在自动化过程中,遇到js处理的元素,需要使用js语言对元素进行操作,例如,滑动到浏览器的底部或者顶部,时间控件的处理,元素可见不可见以及富文本的处理等,都需要js语言的支持 ...

  2. JavaScript错误-throw、try和catch

    try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行. JavaS ...

  3. gnuplot 让您的数据可视化

    https://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html http://blog.sciencenet.cn/blog-3733 ...

  4. MFC程序使用控制台打印

    1.在OnCreate窗口创建方法中调用控制台窗口创建方法,创建的窗口是与MFC主窗口共存亡的 参考地址:https://blog.csdn.net/Yong_Qi2015/article/detai ...

  5. servlet3 使用

    一 servlet类 @WebServlet() 用于注释servlet类      参数一般直接设置value外部访问名,省略value 参数类型 value            参数的值就是外部 ...

  6. Servlet继承体系结构

    Servlet如何只定义1个service方法,其它的方法按需求设置 Servlet——接口 ↑继承 GenericServlet——抽象类 ↑继承 HttpServlet——抽象类:推荐使用 Gen ...

  7. linx下跑多个tomcat

    1.修改server.xml文件 <Server port="8005" shutdown="SHUTDOWN"> <Connector po ...

  8. Discovering Gold lightoj 1030

    一排1到n的格子,每个格子上有黄金 ai ,你最开始在 1 号,每一次投骰子决定到哪一个格子,超出1~n范围则重新投掷,你到了哪个格子就得到哪个格子的金币,问最终在n 能得到金币的期望. 思路:做题经 ...

  9. ES6 Set和Map的那点事

    Set  1.Set特点 类数组 新增数据结构 是构造函数 成员值唯一  注重独一无二的特征 2.Set实例的常用方法 console.log('------------Set操作方法-------- ...

  10. php的排序函数

    sort(array,sortingtype); 参数 描述 array 必需.规定要进行排序的数组. sortingtype 可选.规定如何比较数组的元素/项目.可能的值: 0 = SORT_REG ...