HDU/HDOJ 2612 Find a way 双向BFS
题目链接: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相关推荐
- hdu 3567(八码数 + 双向bfs)
题目连接:https://vjudge.net/contest/353606#problem/B 参考文章:https://blog.csdn.net/laaahu/article/details/9 ...
- HDU 1043 Eight(双向BFS+康托展开)
http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...
- 专题训练二 搜索进阶 HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离)
HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离) Problem Description Last night, little erriyue had a horrible ...
- 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)
[HDU 2612 Find a Way(BFS)](兼BFS入门笔记) 原题入口: http://acm.hdu.edu.cn/showproblem.php?pid=2612 第一篇在CSDN的博 ...
- HDU - 3085 Nightmare Ⅱ(双向bfs)
题目链接:点击查看 题目大意:给出一个迷宫,一个男孩和一个女孩还有两只鬼,男孩每秒钟走3格,女孩每秒钟走1格,鬼每秒钟向四周分裂2格,问男孩和女孩能否在鬼占领迷宫之前汇合,能的话输出汇合时间,否则输出 ...
- HDU3085 Nightmare Ⅱ —— 双向BFS + 曼哈顿距离
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Other ...
- 浅谈迷宫搜索类的双向bfs问题(例题解析)
文章目录 前言 bfs类问题 双向bfs 例题实战 前言 文章若有疏忽还请指正,更多精彩还请关注公众号:bigsai 在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,b ...
- [题解](双向bfs)hdu_3085_Nightmare Ⅱ
发现直接搜索比较麻烦,但是要同时两个人一起走容易想到双向bfs,比较普通, 在判断是否碰到ghost时只要比较两点的曼哈顿距离大小和step*2(即ghost扩散的距离)即可,仔细思考也是可以想到的 ...
- UVA1601The Morning after Halloween 单向加双向bfs
题意:w*h(w,h16)网格上有n(n3)个小写字母(代表鬼).要求把它们分别移动到对应的大写字母里.每步可以有多个鬼同时移动(均为往上下左右四个方向之一移动),但每步结束之后任何两个鬼不能占用同一 ...
最新文章
- 李彦宏:简单搜索永远没有广告;安全是自动驾驶第一天条
- regexpal 正则表达式实时调试工具
- 和ur的区别_UR机械臂simscape正逆解仿真
- 在cmd指令看计算机位数,在.cmd中使用Windows命令来测试32位或64位并运行命令
- 30.jvm.gc(GC之详解CMS收集过程和日志分析)
- leetcode543. 二叉树的直径
- html5之api,HTML5之API(示例代码)
- python pandas 对带时间序列的数据进行重采样处理
- linux下Oracle 相关命令
- 树莓派镜像备份 linux系统,使用dump和restore来制作树莓派的img镜像
- 华硕主板装系统蓝屏_华硕笔记本电脑重装系统后蓝屏怎么办
- 逆矩阵和伴随矩阵(Inverse matrix and adjoint matrix)
- cad详图怎么画_CAD结构图怎么画?手把手教你CAD结构图的绘制方法
- RNA-seq那些事儿
- ODOO 开源 ERP 和 CRM
- ubuntu禁用guest账户
- 如何证明根号3是无理数?------顺便说下希帕索斯和第一次数学危机
- vue拖动滑块验证组件
- 计算机培训研修心语,学子榜样 | 2018级国家励志奖学金程春旭:不忘初心,砥砺前行...
- 特征缩放(Feature Scaling)
热门文章
- pc端vue项目打开pdf文件;网页查看pdf文件;浏览器直接打开pdf文件
- uni-app阻止事件冒泡
- [react] React16废弃了哪些生命周期?为什么?
- [css] transition、animation、transform三者有什么区别?
- 工作184:自定义事件
- 前端学习(2371):组件之间的通讯方式
- “约见”面试官系列之常见面试题之第七十二篇之arrayList(建议收藏)
- 前端学习(1983)vue之电商管理系统电商系统之清空表格数据
- 前端学习(955):移动端特效导读
- 前端学习(696):双重for循环