题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612

思路:

裸的BFS,对于Y,M分别进行BFS,求出其分别到达各个点的最小时间;

然后对于@的点,将两者的最小时间相加即为到达此点的总时间,遍历所有@点,更新结果即可;

代码:

 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<queue>
#define MAX 0x7f7f7f7f
using namespace std;
int n,m;
int startY_x,startY_y;
int startM_x,startM_y;
char map[][];
int d[][]={,,-,,,,,-};
int vis1[][];
int vis2[][];
class node
{
public:
int x;
int y;
int time;
}cur,next;
queue<node>q;
bool Jude(int x,int y)
{
if(x<||x>=n||y<||y>=m||map[x][y]=='#')
return false;
return true;
}
void init()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
{
vis1[i][j]=;
vis2[i][j]=;
} }
void bfs(int key)
{
while(!q.empty())
{
cur=q.front();
q.pop();
for(int i=;i<;i++)
{
int x=cur.x+d[i][];
int y=cur.y+d[i][];
if(!Jude(x,y)) continue;
if(key==)
{
if(vis1[x][y]) continue;
next.x=x;
next.y=y;
next.time=cur.time+;
vis1[x][y]=next.time;
q.push(next);
}
if(key==)
{
if(vis2[x][y]) continue;
next.x=x;
next.y=y;
next.time=cur.time+;
vis2[x][y]=next.time;
q.push(next);
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
cin>>map[i][j];
if(map[i][j]=='Y')
{
startY_x=i;
startY_y=j;
}
if(map[i][j]=='M')
{
startM_x=i;
startM_y=j;
}
}
} cur.x=startY_x;
cur.y=startY_y;
cur.time=;
vis1[cur.x][cur.y]=;
q.push(cur);
bfs(); while(!q.empty()) q.pop();
cur.x=startM_x;
cur.y=startM_y;
cur.time=;
vis2[cur.x][cur.y]=;
q.push(cur);
bfs(); long long ans=MAX;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
if(map[i][j]=='@' && vis1[i][j] && vis2[i][j])
{
long long temp=vis1[i][j]+vis2[i][j];
ans=min(ans,temp);
}
}
cout<<ans*<<endl;
}
return ;
}

hdu2612 Find a way BFS的更多相关文章

  1. HDU2612 Find a way —— BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 Find a way Time Limit: 3000/1000 MS (Java/Others ...

  2. hdu2612(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 题意:求2个点到任意一个KFC的距离之和,使其最小. 分析:由两个点出发分别两次bfs,求得到每 ...

  3. 简单bfs(hdu2612)

    #include<stdio.h>#include<string.h>#include<queue>#define INF 0x3f3f3f3fusing name ...

  4. HDU-2612.Find way .(不同起点不同终点的BFS)

    我要被这个好用的memset气死了...... 真香 #include <cstring> #include <string> int main () { ]; memset( ...

  5. HDU2612 BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 , 一道比较简单的广搜(BFS)题目. 算法: 设置两个dist[][]数组,记录Y和M到几个K ...

  6. HDU2612 Find a way (跑两遍BFS)

    Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...

  7. hdu 2612 Find a way(BFS)

    题目链接:hdu2612 思路:题意是求两个人到某一个KFC花费时间和最小,其实就是求最短距离和,用两个BFS,分别以两个人为起点,分别记录下两人到每个KFC的距离,然后求出最小的和 #include ...

  8. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  9. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

随机推荐

  1. js面向对象-原型链

    var Person = function (name) { this.name = name; } Person.prototype.say = function () { console.log( ...

  2. 使用VB6写一个自定义的进度信息框窗口

    一.起因说明 之前有些项目是用Access完成的,当时为了给用户显示一些进度信息,自制了一个进度信息窗体,类似下图所示: 随着项目不断变迁,需要将进度信息按阶段及子进度进行显示,并且出于代码封装的需求 ...

  3. 手机自动化培训:Appium介绍

    手机自动化培训:Appium介绍 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  4. 使用VS2015将解决方案同步更新到Github上

    如今开源已经是一种趋势与潮流了,今天就来谈一谈如何将利用VS将我们的解决方案同步更新到Github上. 第一步:登录自己的Github账号(没有的自行注册). 我的Github登录后的界面: 第二步: ...

  5. 【Android】XML文件的解析

    1.首先我们可以在res包路径下创建一个raw包,然后在raw下创建一个email.xml 文件,并修改其内容如下: <?xml version="1.0" encoding ...

  6. 使用FSharp 探索Dotnet图像处理功能1--反色变化

    坚持写博客是最近的目标.加油. 业余学习fsharp以来一直觉得这才是Dotnet开发,或者说所有开发者应该拥有的语言.配合Visual Studio的代码提示,即时执行窗口.开发程序有着极大的乐趣. ...

  7. 解决tomcat debug 调试时间过长的问题

    做java web很早就碰到一个问题,eclipse 的调试有时候忽然启动时间奇慢 ,但是正常启动速度没问题,其他项目也完全正常 后来想想也不影响项目运行,也没太在意 不过今天又碰到这问题了,而且启动 ...

  8. 在ASP.NET MVC4中配置Castle

    ---恢复内容开始--- Castle是针对.NET平台的一个非常优秀的开源项目,重点是开源的哦.它在NHibernate的基础上进一步封装,其原理基本与NHibernate相同,但它较好地解决NHi ...

  9. Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介

    日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...

  10. java中创建对象中使用默认构造函数的注意点

    public class Test3 {   private int n;   Test3() {      System.out.println("调用默认构造器");   }  ...