题目:

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

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 题意:题意大概是在一幅地图上面,一直两个人的位置,求这两个人到KFC的最小距离之和,最后乘以11得到所用最小时间和
(KFC用‘@’表示,墙用‘#’表示,两个人分别为M和Y,‘.’表示能通过)
分析:分别求用bfs求两个人到KFC的最短距离,(我将maxi设置成的40050,因为m<=200,n>=2,我用的40050AC了),将每一条
KFC的距离进行比较得出最短距离
AC代码:
#include<iostream>
#include<queue>
#include<string.h>
#include<string>
using namespace std;
struct knot
{
int x,y; //结点的横纵坐标
int t; //到达当前结点所走的步数
};
knot ai,temp; int s1[][]; //判断所在结点是否为遍历过
int n,m; //地图大小
int s2[][][];
int flag[][]={,,-,,,,,-}; //用于移动的方向
char a[][];
int mini(int a,int b)
{
return a>b?b:a;
}
void bfs(int ix,int iy,int ik) //广度优先查找
{
queue<knot>s; //建立一个装knot的队列
temp.x=ix; //temp作为中间变量,即主函数中需要查找的点
temp.y=iy;
temp.t=; //移动步数初始化为0;
s.push(temp);
while (!s.empty())
{
ai=s.front();
s.pop();
temp.t=ai.t+; //移动步数加1
for (int i=;i<;i++)
{
temp.x=ai.x+flag[i][]; //移动x坐标
temp.y=ai.y+flag[i][]; //移动y坐标
if (temp.x>=&&temp.x<n&&temp.y>=&&temp.y<m&&s1[temp.x][temp.y]==&&a[temp.x][temp.y]!='#') //判断还能不能朝着同一个方向继续前行
{
if (a[temp.x][temp.y]=='@')
s2[ik][temp.x][temp.y]=temp.t;
s1[temp.x][temp.y]=;
s.push(temp);
}
} }
}
int main()
{ int xm,ym,xy,yy; while (cin>>n>>m)
{ for (int i=;i<n;i++)
{
for (int j=;j<m;j++)
{ cin>>a[i][j];
if (a[i][j]=='M') //确定M所在位置的坐标
xm=i,ym=j;
if (a[i][j]=='Y') //确定Y所在位置的坐标
xy=i,yy=j;
} }
int maxi=; //注意maxi初始化的位置,在输入一组地图以后maxi会发生改变
memset(s1,,sizeof(s1));
memset(s2,,sizeof(s2));
s1[xm][ym]=;
bfs(xm,ym,);
memset(s1,,sizeof(s1)); //在第一次进行bfs时,s1数据发生改变,因此在第二次bfs前需要清零;memset的头文件为#include<cstring>
s1[xy][yy]=;
bfs(xy,yy,);
for (int i=;i<n;i++)
for (int j=;j<m;j++)
if (s2[][i][j]&&s2[][i][j])
maxi=mini(maxi,s2[][i][j]+s2[][i][j]); //求最小距离
cout << maxi* << endl; //每一步需要11分钟
}
return ;
}

 

Find a way (广度优先搜索)的更多相关文章

  1. 图的广度优先搜索(BFS)

    把以前写过的图的广度优先搜索分享给大家(C语言版) #include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20 ...

  2. 广度优先搜索(BFS)

    定义 维基百科:https://en.wikipedia.org/wiki/Breadth-first_search 给定图G=(V,E)和一个可识别的源结点s,广度优先搜索对图G中的边进行系统性的探 ...

  3. 总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较

    广度优先搜索(BFS) 1.将头结点放入队列Q中 2.while Q!=空 u出队 遍历u的邻接表中的每个节点v 将v插入队列中 当使用无向图的邻接表时,复杂度为O(V^2) 当使用有向图的邻接表时, ...

  4. ACM题目————图的广度优先搜索

    题目描述 图的广度优先搜索类似于树的按层次遍历,即从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接 点的邻接点.如此进行下去,直到所有的结点都访问为止.在该题中,假定所有的结 ...

  5. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  6. HDU 1312 Red and Black DFS(深度优先搜索) 和 BFS(广度优先搜索)

    Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  7. HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  8. HDU 1242 Rescue (BFS(广度优先搜索))

    Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  9. SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜 ...

  10. 广度优先搜索BFS

    广度优先搜索可以形成一个广度优先搜索树 算法时间为O(V+E),两重循环 输入:图g,起点start(int) 需要的数据结构:队列Q.color数组(存放每个顶点的颜色) 算法过程: 1. 预处理: ...

随机推荐

  1. vue 常用知识点

    1.数据变更,页面渲染完成 this.$nextTick(function(){ alert('v-for渲染已经完成') }) 2.iview select组件 setQuery用法 <Sel ...

  2. AFNetWorking3.0.4(Weather Demo)

    参考文章:http://www.jianshu.com/p/99bcc40abb30 demo下载地址:http://pan.baidu.com/s/1eRuYDEi 密码:ma5m 使用最新AFNe ...

  3. 【网络流】Modular Production Line

    [网络流]Modular Production Line 焦作上的一道,网络流24题中的原题.... https://nanti.jisuanke.com/t/31715 给出了1e5个点,但是因为最 ...

  4. 如何让网站HTTPS评级为A或者A+

    环境说明:CentOS Linux release 7.5.1804 (Core).nginx/1.10.0 需求:公司网站在myssl的评级只得到了B的评分,需要提升至A+ 具体操作如下: 一.ng ...

  5. Spring IOC 和AOP

    Spring是什么? Spring是一个轻量级的IoC和AOP容器框架. IOC:IOC就是控制反转,控制反转指的是把创建对象和管理对象之间的依赖关系交给了IOC容器来管理.以前new对象由程序员来控 ...

  6. 使用selenium模拟浏览器抓取淘宝信息

    通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中. from selenium import webdriver from selenium.common.excep ...

  7. Linux保护机制

    RELRO(RELocation Read Only) 在Linux中有两种RELRO模式:"Partial RELRO" 和 "Full RELRO".Lin ...

  8. K3CLOUD日志目录

    业务站点安装目录\K3Cloud\WebSite\App_Data\Log下面找

  9. 实验报告8 AC+Fit AP组网通过三层网络注册(DHCP Option 43)

    实验报告8 课程名称 无线网络与安全技术 实验名称 AC+Fit AP组网通过三层网络注册(DHCP Option 43) 姓名 学号 班级 实 验 目 的   [实验目的] 了解AC+Fit AP跨 ...

  10. 吴裕雄--天生自然python学习笔记:python 用pyInstaller模块打包文件

    要想在没有安装 Python 集成环境的电脑上运行开发的 Python 程序,必须把 Python 文件打包成 .exe 格式的可执行 文件. Python 的打包工作 PyInstaller 提供了 ...