【题目描述】
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

【题目分析】
进过分析就是一个很简单的BFS,只不过需要对两个人分别进行BFS然后再依次对每个KFC判断,取步数和最少的。
需要注意的是如果初始化的时候步数为0,那么某个KFC的步数为0说明有一个人无法到达这个地方,需要判断,否则会错
【AC代码】

#include<cstdio>
#include<cstring>
#include<queue>
#include<climits>
using namespace std;const int drc[4][2]={{1,0},{-1,0},{0,1,},{0,-1}};
const int MAXN=205;
char map[MAXN][MAXN];
bool vis[MAXN][MAXN];
int a1[MAXN][MAXN];
int a2[MAXN][MAXN];
int n,m,ans;
int x1,x2,y1,y2;struct node
{int x,y;int step;
}t,p;
int cnt=0;void BFS1()
{int u,v;queue<node> q;p.x=x1; p.y=y1; p.step=0;memset(vis,0,sizeof(vis));memset(a1,0,sizeof(a1));vis[x1][y1]=1;q.push(p);while(!q.empty()){p=q.front(); q.pop();if(map[p.x][p.y]=='@'){a1[p.x][p.y]=p.step;}for(int i=0;i<4;i++){u=p.x+drc[i][0]; v=p.y+drc[i][1];if(u<0 || u>=n || v<0 || v>=m) continue;if(map[u][v]=='#' || vis[u][v]) continue;vis[u][v]=1;t.x=u; t.y=v; t.step=p.step+1;q.push(t);}}
}void BFS2()
{int u,v;queue<node> q;p.x=x2; p.y=y2; p.step=0;memset(vis,0,sizeof(vis));memset(a2,0,sizeof(a1));vis[x2][y2]=1;q.push(p);while(!q.empty()){p=q.front(); q.pop();if(map[p.x][p.y]=='@'){a2[p.x][p.y]=p.step;}for(int i=0;i<4;i++){u=p.x+drc[i][0]; v=p.y+drc[i][1];if(u<0 || u>=n || v<0 || v>=m) continue;if(map[u][v]=='#' || vis[u][v]) continue;vis[u][v]=1;t.x=u; t.y=v; t.step=p.step+1;q.push(t);}}
}int main()
{while(~scanf("%d%d",&n,&m)){memset(map,0,sizeof(map));for(int i=0;i<n;i++){scanf("%s",map[i]);for(int j=0;j<m;j++){if(map[i][j]=='Y'){x1=i; y1=j; map[i][j]='.';continue;}if(map[i][j]=='M'){x2=i; y2=j; map[i][j]='.';continue;}}}BFS1();BFS2();ans=INT_MAX;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(map[i][j]=='@' && a1[i][j]!=0 && a2[i][j]!=0)  //很重要{ans=min(ans,a1[i][j]+a2[i][j]);}}}printf("%d\n",ans*11);}return 0;
}

Find a way——BFS相关推荐

  1. HDU-1459.非常可乐(BFS )

    这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...

  2. HDU1548:A strange lift(Dijkstra或BFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...

  3. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  4. usaco Overfencing 穿越栅栏(BFS)

    Overfencing 穿越栅栏 农夫 John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出 了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个" ...

  5. 数据结构--搜索BFS

    文章目录 广度优先搜索 典型例题 广度优先搜索 广度优先搜索类似于树的层次遍历过程.它需要借助一个队列来实现.如图2-1-1所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1.v2. ...

  6. 2017icpc沈阳 G Infinite Fraction Path BFS+剪枝

    题意:给一个长度为n的字符串数组,你可以选定起点跳n次,从i点只能跳到(i*i+1)%n的位置,最后求一个最大字典序. 思路:要求最大的,即每一步都是最大,所以将最大的数都入队进行bfs跳下一步. 剪 ...

  7. HDU - 5876 Sparse Graph 2016 ACM/ICPC 大连网络赛 I题 bfs+set+补图最短路

    题目链接 题意:给的补图,让你求一个源点到其他点的最短距离,因为图太稠密了, 用dij以及spfa根本不得行,这里只能用一种我不会方法来进行,这里用了bfs的方法以及set来维护,分别set维护一个未 ...

  8. 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)

    目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...

  9. hiho_1139_二分+bfs搜索

    题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值.  题目链接:二分      最小化最大值,考虑采用二分搜索.对所有的边 ...

  10. fzu 2150 Fire Game 【身手BFS】

    称号:fzu 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个格子扩散,问选择那两个点使得燃烧全部 ...

最新文章

  1. 【每日一算法】二叉搜索树结点最小距离
  2. 评论列表显示及排序,个人中心显示
  3. smark和openfire即时通信代码
  4. U-Boot 之四 构建过程(Kconfig 配置 + Kbuild 编译)详解
  5. 如何提升 Kestrel 上传文件的大小限制?
  6. matlab设置非平坦结构元,详解MATLAB/Simulink通信系统建模与仿真图书信息
  7. 理解题意优于一切(记洛谷P1426题WA的经历,Java语言描述)
  8. sitecore系统教程之体验编辑器
  9. mysql去重函数的使用方法_MySQL中使用去重distinct方法的示例详解
  10. J1939入门(一)
  11. SPSS——相关分析——偏相关(Partial)分析
  12. Unable to execute diff program: WinDiff 【SourceOffSite】
  13. 计算机网络显示红X无法连接,电脑无线网络连接不上,出现了红x❌
  14. 拯救者笔记本 除尘后 开机蓝屏
  15. PowerDesigner显示Comment注释
  16. 如何切换到root用户
  17. 其他品牌的触控笔能用在ipad上?性价比高的触控笔合集
  18. 魔法少女小圆计算机音乐,魔法少女小圆 无损音乐合集
  19. canvas-绘制图片
  20. 基于学术研究下载NOAA探空数据资料的详细步骤

热门文章

  1. [回归分析][10]--相关误差的问题
  2. iOS GorupBy
  3. 数学图形之Boy surface
  4. 模式匹配运算符–Shell
  5. 开始python之旅
  6. CDOJ--1668
  7. python文件的读取与写入_python中文件的读取与写入以及os模块
  8. from 下拉框多个值提交_Git commit 多行信息提交
  9. C语言中实际参数太多,c – 宏的实际参数太多了?
  10. #获得请求来源ip_以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解