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

思路:从两个起点出发,有多个终点,求从两个起点同时能到达的终点具有的最小时间,开两个数组分别保存两个起点到达每一个终点的用时,最后将两个

数组里的时间加起来求最小的一组,必须对应相加,因为终点必须同时到达。

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <sstream>
#include <cstdlib>
#include <fstream>
#include <queue>
using namespace std;
struct node{int x,y,step;
}a[1010];
node p,q;
int n,m,sx1,sy1,sx2,sy2,ans1[1010],ans2[1010],ans[1010];
int mmin,cnt;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
char maze[205][205];
bool visit[205][205];
int judge(int x,int y){for(int i=1;i<cnt;i++){if(x==a[i].x&&y==a[i].y)return i;}return 0;
}
void bfs1(int x,int y){memset(ans,0,sizeof(ans));memset(ans1,-1,sizeof(ans1));memset(visit,0,sizeof(visit));queue<node> Q;p.x=x;p.y=y;p.step=0;Q.push(p);visit[p.x][p.y]=1;while(!Q.empty()){p=Q.front();Q.pop();int num=judge(p.x,p.y);if(num){ans[num]=p.step;visit[p.x][p.y]=1;}for(int i=0;i<4;i++){q.x=p.x+dir[i][0];q.y=p.y+dir[i][1];q.step=p.step+1;if(q.x<0||q.x>=n||q.y<0||q.y>=m)continue;if(visit[q.x][q.y])continue;if(maze[q.x][q.y]=='#')continue;Q.push(q);visit[q.x][q.y]=1;}}for(int i=1;i<cnt;i++){if(ans[i])ans1[i]=ans[i];}}
void bfs2(int x,int y){memset(ans,0,sizeof(ans));memset(ans2,-1,sizeof(ans2));memset(visit,0,sizeof(visit));queue<node> Q;p.x=x;p.y=y;p.step=0;Q.push(p);visit[p.x][p.y]=1;while(!Q.empty()){p=Q.front();Q.pop();int num=judge(p.x,p.y);if(num){ans[num]=p.step;visit[p.x][p.y]=1;}for(int i=0;i<4;i++){q.x=p.x+dir[i][0];q.y=p.y+dir[i][1];q.step=p.step+1;if(q.x<0||q.x>=n||q.y<0||q.y>=m)continue;if(visit[q.x][q.y])continue;if(maze[q.x][q.y]=='#')continue;Q.push(q);visit[q.x][q.y]=1;}}for(int i=1;i<cnt;i++){if(ans[i])ans2[i]=ans[i];}
}
int main()
{//ifstream fin;//fin.open("data1.txt");while(cin>>n>>m){cnt=1;for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>maze[i][j];if(maze[i][j]=='Y'){sx1=i;sy1=j;}if(maze[i][j]=='M'){sx2=i;sy2=j;}if(maze[i][j]=='@'){a[cnt].x=i;a[cnt++].y=j;}}mmin=999999;bfs1(sx1,sy1);bfs2(sx2,sy2);for(int i=1;i<cnt;i++){if(ans1[i]!=-1&&ans2[i]!=-1){int tsum=ans1[i]+ans2[i];if(mmin>tsum)mmin=tsum;}}cout<<mmin*11<<endl;}return 0;}

转载于:https://www.cnblogs.com/snake-hand/p/3144771.html

HDU/HDOJ 2612 Find a way 双向BFS相关推荐

  1. hdu 3567(八码数 + 双向bfs)

    题目连接:https://vjudge.net/contest/353606#problem/B 参考文章:https://blog.csdn.net/laaahu/article/details/9 ...

  2. HDU 1043 Eight(双向BFS+康托展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...

  3. 专题训练二 搜索进阶 HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离)

    HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离) Problem Description Last night, little erriyue had a horrible ...

  4. 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)

    [HDU 2612 Find a Way(BFS)](兼BFS入门笔记) 原题入口: http://acm.hdu.edu.cn/showproblem.php?pid=2612 第一篇在CSDN的博 ...

  5. HDU - 3085 Nightmare Ⅱ(双向bfs)

    题目链接:点击查看 题目大意:给出一个迷宫,一个男孩和一个女孩还有两只鬼,男孩每秒钟走3格,女孩每秒钟走1格,鬼每秒钟向四周分裂2格,问男孩和女孩能否在鬼占领迷宫之前汇合,能的话输出汇合时间,否则输出 ...

  6. HDU3085 Nightmare Ⅱ —— 双向BFS + 曼哈顿距离

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Other ...

  7. 浅谈迷宫搜索类的双向bfs问题(例题解析)

    文章目录 前言 bfs类问题 双向bfs 例题实战 前言 文章若有疏忽还请指正,更多精彩还请关注公众号:bigsai 在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,b ...

  8. [题解](双向bfs)hdu_3085_Nightmare Ⅱ

    发现直接搜索比较麻烦,但是要同时两个人一起走容易想到双向bfs,比较普通, 在判断是否碰到ghost时只要比较两点的曼哈顿距离大小和step*2(即ghost扩散的距离)即可,仔细思考也是可以想到的 ...

  9. UVA1601The Morning after Halloween 单向加双向bfs

    题意:w*h(w,h16)网格上有n(n3)个小写字母(代表鬼).要求把它们分别移动到对应的大写字母里.每步可以有多个鬼同时移动(均为往上下左右四个方向之一移动),但每步结束之后任何两个鬼不能占用同一 ...

最新文章

  1. 李彦宏:简单搜索永远没有广告;安全是自动驾驶第一天条
  2. regexpal 正则表达式实时调试工具
  3. 和ur的区别_UR机械臂simscape正逆解仿真
  4. 在cmd指令看计算机位数,在.cmd中使用Windows命令来测试32位或64位并运行命令
  5. 30.jvm.gc(GC之详解CMS收集过程和日志分析)
  6. leetcode543. 二叉树的直径
  7. html5之api,HTML5之API(示例代码)
  8. python pandas 对带时间序列的数据进行重采样处理
  9. linux下Oracle 相关命令
  10. 树莓派镜像备份 linux系统,使用dump和restore来制作树莓派的img镜像
  11. 华硕主板装系统蓝屏_华硕笔记本电脑重装系统后蓝屏怎么办
  12. 逆矩阵和伴随矩阵(Inverse matrix and adjoint matrix)
  13. cad详图怎么画_CAD结构图怎么画?手把手教你CAD结构图的绘制方法
  14. RNA-seq那些事儿
  15. ODOO 开源 ERP 和 CRM
  16. ubuntu禁用guest账户
  17. 如何证明根号3是无理数?------顺便说下希帕索斯和第一次数学危机
  18. vue拖动滑块验证组件
  19. 计算机培训研修心语,学子榜样 | 2018级国家励志奖学金程春旭:不忘初心,砥砺前行...
  20. 特征缩放(Feature Scaling)

热门文章

  1. pc端vue项目打开pdf文件;网页查看pdf文件;浏览器直接打开pdf文件
  2. uni-app阻止事件冒泡
  3. [react] React16废弃了哪些生命周期?为什么?
  4. [css] transition、animation、transform三者有什么区别?
  5. 工作184:自定义事件
  6. 前端学习(2371):组件之间的通讯方式
  7. “约见”面试官系列之常见面试题之第七十二篇之arrayList(建议收藏)
  8. 前端学习(1983)vue之电商管理系统电商系统之清空表格数据
  9. 前端学习(955):移动端特效导读
  10. 前端学习(696):双重for循环