-->Find a way

直接上Chinese

 Descriptions:

hsj和lsh最近迷上了pokemon go的游戏。在双十一大物期中考试来临之前,他们想抓一只稀有土拨鼠来攒攒人品(因为土拨鼠的刷新地点最近来到了哈工程)
但是由于土拨鼠过于强大,他的雷霆半月斩以及惊天浪涛沙都可以轻松的将他们两击败,但是他们两的合击必杀技流影电光闪以及天羽屠鼠舞可以将土拨鼠打至昏迷状态,并可将其捕获。
但是因为这是款按时间付费的游戏,他们需要尽快捕捉到土拨鼠(即他们两到土拨鼠的时间之和需要最少),因此他们找到了你来帮他们解决这个问题。 规定每走一步需要花费11分钟。


Input

输入存在多组(需使用!=EOF)
每组的第一行有两个整数n,m(2<=n,m<=200)
接下来n行,每行包括m个字符
‘Y’表示hsj所在的位置
‘M’表示lsh所在的位置
‘.’表示可以通过的地方
‘#’表示教学楼即不能走的地方
‘@’表示稀有土拨鼠刷新的地方(地图中存在多只稀有土拨鼠)
Output

对于每组样例输出他们到达土拨鼠刷新点的最小时间总和。
保证每组样例都存在一个土拨鼠刷新点,他们两都能到达 
Sample Input

4 4
Y.#@
....
.#..
@..M
4 4
Y.#@
....
.#..
@#.M
5 5
Y..@.
.#...
.#...
@..M.
#...#

Sample Output

66
88
66

题目链接:

https://vjudge.net/problem/HDU-2612

这可以说是一题两个bfs

分别求出Y、M在这张地图所有地方的所用时间,再求出在"@"地方的时间的最小值即可

具体操作看代码

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
using namespace std;
int T,n,m;
char mp[][];//原始地图
int vis[][];//记录人是否走过
int ytime[][];//Y 经过这个地方的时间
int mtime[][];//M 经过这个地方的时间
int dt[][]= {{,},{-,},{,},{,-}};//四个方向
struct node
{
int x,y;//坐标
};
node now,net;
node Y,M;
void bfs(int f)//人
{
queue<node>q;
MEM(vis,);//都要初始化,都没走过,设为0
if(f==)// Y的情况
{
MEM(ytime,INF);
q.push(Y);
vis[Y.x][Y.y]=;
ytime[Y.x][Y.y]=;
}
if(f==)// M的情况
{
MEM(mtime,INF);
q.push(M);
vis[M.x][M.y]=;
mtime[M.x][M.y]=;
}
while(!q.empty())// bfs 一样的套路
{
now=q.front();
q.pop();
for(int i=; i<; i++)//四个方向
{
net.x=now.x+dt[i][];
net.y=now.y+dt[i][];
if(net.x>=&&net.x<n&&net.y>=&&net.y<m&&!vis[net.x][net.y]&&mp[net.x][net.y]!='#')//满足条件
{
q.push(net);//入队
vis[net.x][net.y]=;//走过了
if(f==)//Y 的路线时间
ytime[net.x][net.y]=ytime[now.x][now.y]+;
if(f==)//M 的路线时间
mtime[net.x][net.y]=mtime[now.x][now.y]+;
}
}
}
}
int main()
{
while(cin>>n>>m)
{
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
cin>>mp[i][j];
if(mp[i][j]=='Y')
{
Y.x=i;
Y.y=j;
}
if(mp[i][j]=='M')
{
M.x=i;
M.y=j;
}
}
}
bfs(); //Y的路线
bfs(); //M的路线
int ans=INF; //最小步数
for(int i=; i <n; i++)//搜一遍地图,看一下"@"所在地方的时间之和,取最小值
for(int j=; j<m; j++)
if(mp[i][j]=='@')
ans=min(ans,ytime[i][j]+mtime[i][j]);
cout<<*ans<<endl;
}
return ;
}

【HDU - 2612】Find a way的更多相关文章

  1. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  2. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  3. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  4. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  5. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  6. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  7. 【hdu 1043】Eight

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...

  8. 【HDU 3068】 最长回文

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...

  9. 【HDU 4699】 Editor

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...

随机推荐

  1. Expression.Blend.4 Chapter 接口设计

    原文:Expression.Blend.4 Chapter 接口设计 发现网上关于silverlight,WPF美工系列的书籍一直很少,而且很多都是英文的.在公司无聊,开始进行翻译. 翻译的地方可能有 ...

  2. Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1)

    原文:Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1) 首先感谢:http://blog.csdn.net/shuilan0066/article/detail ...

  3. 如何将任意文件固定在 Win10 的开始屏幕中

    虽然Wox和Launchy是我日常启动程序的主力方式,不过开始屏幕的图标方便归类,这是快速启动工具所不能提供的,因此我也会将最常用的程序在开始屏幕上分类固定. 最近需要将一个常用的批处理文件(*.ba ...

  4. XAML的命名空间 - CSDN博客

    原文:XAML的命名空间 - CSDN博客 一个最简单的XAML例子 <Window x:Class="WpfApplication1.MainWindow" xmlns=& ...

  5. CSS,让100%的宽度,自动减10,让100%的高度,自动减10,可以加减乘除

    CSS,让100%的宽度,自动减10,让100%的高度,自动减10,可以加减乘除 实例: .add{ width: calc(100% - 10px); height: calc(100% - 10p ...

  6. API Hook基本原理和实现

    API Hook基本原理和实现 2009-03-14 20:09 windows系统下的编程,消息message的传递是贯穿其始终的.这个消息我们可以简单理解为一个有特定意义的整数,正如我们看过的老故 ...

  7. 图像滤镜艺术---PS图像转手绘特效实现方案

    原文:图像滤镜艺术---PS图像转手绘特效实现方案 手绘效果实现方案 本文介绍一种PS手绘效果的实现方案,PS步骤来自网络,本文介绍代码实现过程. 整体看来,虽然效果还是有很大差异,但是已经有了这种特 ...

  8. synchronized 专题

    这几天不断添加新内容,给个大概的提纲吧,方面朋友们阅读,各部分是用分割线隔开了的: synchronized与wait()/notify() JMM与synchronized ThreadLocal与 ...

  9. 微信小程序把玩(四十)animation API

    原文:微信小程序把玩(四十)animation API 动画水还是比较深的,这里只是简单介绍下小程序中动画的一些属性和注意事项,做动画前一定要整理好思路将动画一步步分解,再进行组合!这里只做引入. w ...

  10. win7 64 下安装MyGeneration 遇到的问题解决方法

    win7 64 下安装MyGeneration  遇到的问题 ---------------------------MyGeneration 1.3 Setup-------------------- ...