hdu 2612(bfs)Find a way
题意:就是Y和M在@相遇的最短的时间。
思路:基本的广搜题,先Y搜一次,然后M搜一次,最后求出Y和M在@相遇的最短的时间。
代码实现:
#include<iostream> #include<queue> #include<cstring> using namespace std; int n,m,count1[210][210],count2[210][210],visited[210][210];//count1记录的是Y到各个点的最短的时间 int b[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//count2记录的是M到各个点最短的时间 char str[210][210]; struct node{int x;int y; }; int nima(int x,int y) {if(x>=0&&x<n&&y>=0&&y<m&&str[x][y]!='#'&&visited[x][y]==0)return 1;elsereturn 0; } void bfs(int flag,int x,int y) {int f=0,r=0,t1,t2;node p,temp;queue<node>q;p.x=x;p.y=y;q.push(p);if(flag==1){while(!q.empty())//基本的广搜,此时我用的是队列,此前我用的一直是数组,还是队列好多了 {p=q.front();q.pop();for(int i=0;i<4;i++){t1=p.x+b[i][0];t2=p.y+b[i][1];if(nima(t1,t2)){visited[t1][t2]=-1;temp.x=t1;temp.y=t2;q.push(temp);count1[t1][t2]=count1[p.x][p.y]+11;}}}}else{while(!q.empty()){p=q.front();q.pop();for(int i=0;i<4;i++){t1=p.x+b[i][0];t2=p.y+b[i][1];if(nima(t1,t2)){visited[t1][t2]=-1;temp.x=t1;temp.y=t2;q.push(temp);count2[t1][t2]=count2[p.x][p.y]+11;}}}} } int main() {int i,j,x1,y1,x2,y2,a[40005][2],num,flag,min;while(scanf("%d%d",&n,&m)!=EOF){getchar();num=0;min=100000000;for(i=0;i<n;i++)scanf("%s",str[i]);for(i=0;i<n;i++){for(j=0;j<m;j++){count1[i][j]=0;count2[i][j]=0;visited[i][j]=0;if(str[i][j]=='Y'){x1=i;y1=j;}else if(str[i][j]=='M'){x2=i;y2=j;}else if(str[i][j]=='@'){a[num][0]=i;a[num][1]=j;num++;}}}flag=1;visited[x1][y1]=-1;bfs(flag,x1,y1);memset(visited,0,sizeof(visited));flag=2;visited[x2][y2]=-1;bfs(flag,x2,y2);for(i=0;i<num;i++){if(count1[a[i][0]][a[i][1]]!=0&&count2[a[i][0]][a[i][1]]!=0)//@必须是Y和M都能到达的,否则容易出错的哦 {if(min>(count1[a[i][0]][a[i][1]]+count2[a[i][0]][a[i][1]]))min=count1[a[i][0]][a[i][1]]+count2[a[i][0]][a[i][1]];}}printf("%d\n",min);}return 0; }
转载于:https://www.cnblogs.com/jiangjing/archive/2013/03/07/2947835.html
hdu 2612(bfs)Find a way相关推荐
- Hike on a Graph HDU - 1252(bfs)
"Hike on a Graph" is a game that is played on a board on which an undirected graph is draw ...
- 牛客假日团队赛5 L Catch That Cow HDU 2717 (BFS)
链接:https://ac.nowcoder.com/acm/contest/984/L 来源:牛客网 Catch That Cow 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 3 ...
- 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)
[HDU 2612 Find a Way(BFS)](兼BFS入门笔记) 原题入口: http://acm.hdu.edu.cn/showproblem.php?pid=2612 第一篇在CSDN的博 ...
- python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...
Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...
- 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)
一.图的基本介绍 为什么要有图 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图. 图的举例 ...
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...
- 【洛谷】马的遍历--广度优先搜索(BFS)
题目描述 传送门:https://www.luogu.com.cn/problem/P1443 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意 ...
- 二叉搜索树(BFS)总结
满二叉树 定义:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树. 完全二叉树 定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上.这样的二叉 ...
- 广度优先搜索(BFS)与深度优先搜索(DFS)
一.广度优先搜索(BFS) 1.二叉树代码 # 实现一个二叉树 class TreeNode:def __init__(self, x):self.val = xself.left = Nonesel ...
最新文章
- oracle中substr() instr() 用法
- 【Kotlin】扩展函数作用域分析 ( 扩展函数导入 | 扩展函数重载 | 扩展函数作用域优先级 )
- SPSS 26安装教程
- 回文树笔记(转自quack_quack)
- CCTF部分赛题分析
- html5画布 文本无法显示,淡出HTML5画布中的文本效果
- Pentium的指令系统(2)——Pentium的指令系统
- 给你的站点添加 DNS CAA 保护
- 按键精灵 android 模拟器 登录,按键精灵怎么设置安卓模拟器后台
- learun.framework v7.0.6 — . net快速开发框架
- R 和 Python用于统计学分析,哪个更好?
- 信息学奥赛到底考什么?NOI大纲文字收藏版
- csv是什么意思中文_csv文件是什么意思
- select后面的子查询
- magisk卸载内置软件_如何卸载/恢复iPhone自带的内置应用?
- [python]计算miou的方式
- [RoarCTF2019]polyre
- 计算机硬件方面专业术语,计算机专业术语(一)
- 【PTA】谷歌的招聘(C语言)
- 总结MongoDB采用MongoRepository进行查询
热门文章
- echarts迁徙图 vue_vue中高德搭配echarts做数据迁徙流线图
- python scatter参数详解_matplotlib.pyplot.scatter散点图结构及用法||参数详解
- JZOJ__Day 1【NOIP普及模拟】MATRIX
- 笨小猴pascal题解
- BZOJ 4032 luogu P4112 [HEOI2015]最短不公共子串 (DP、后缀自动机)
- c语言二极管控制程序,二极管(STC89C52): 编写程序控制二极管花样流水灯
- mysql幻读和不可重复读的区别_面试官:MySQL的可重复读级别能解决幻读吗
- 无障碍开发(七)之实例讲解
- vue 引用 vue-resource步骤 (遇错排解)
- vue项目打包到腾讯云服务器全过程