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. java程序员摸爬滚打的三年,这些经历你值得借鉴

    不知不觉都2020年2月底了,小羊同学从毕业快开始都一直从事java开发这个行业,前两天开通了头条号,想借此发文分享一下这几年的经历吧,如果你是还没毕业的大学生或者刚入行不久,也许会对你有帮助. 1: ...

  2. C语言程序设计100例之(27):回旋方阵

    例27        回旋方阵 问题描述 编写程序,生成从内到外是连续的自然数排列的回旋方阵.例如,当n=3和n=4时的回旋方阵如下图1所示. 图1  由内到外回旋方阵 输入格式 一个正整数n(1≤n ...

  3. Java+Selenium自动化测试学习(一)

    自动化测试基本流程 1.设置chromedriver的地址System.setProperty(); 2.创建一个默认浏览器ChromeDriver driver = new ChromeDriver ...

  4. jmeter实现IP欺骗

    用jmeter模拟多个IP同时向一个目标发送请求 1.IP地址参数化 在csv文件中编辑参数化IP地址列表,参数化的IP需在同一个局域网,子网掩码相同(比如和客户端本机同一网段),如下 将csv列表中 ...

  5. apache的下载

    官网http://www.apache.org/ 首页第三行左右 点a number of third party vendors 再点第一个ApacheHaus 最后来到windows的下载页面 h ...

  6. Ubuntu执行sudo apt-get update报错E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁

    一.强制解锁,执行语句 sudo rm /var/lib/apt/lists/lock 二.终端输入 ps -aux | grep apt-get 查看一下apt-get的相关进程.然后sudo ki ...

  7. Could not initialize class net.sourceforge.tess4j.TessAPI 解决方法

    java.lang.NoClassDefFoundError: Could not initialize classnet.sourceforge.tess4j.TessAPI 主要原因是在Windo ...

  8. 关于C++指针、引用和const关键字的各种关系

    #include <stdio.h> #include<iostream> using namespace std; typedef char *new_type; int m ...

  9. Python 报错 AttributeError: module 'django.db.models' has no attribute 'SubfieldBase'

    AttributeError: module 'django.db.models' has no attribute 'SubfieldBase' http://www.guanggua.com/qu ...

  10. django+vue基础框架:django one对one格式

    创建app:python manage.py startapp  app01(这里的app01是指名字,可以是a或b等等) 生成迁移文件:python manage.py makemigrations ...