BFS(入门题--迷宫)
//这题之前用DFS写过,现在再用它来写BFS
1185: 走迷宫
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 435 Solved: 168
[Submit][Status][Web Board]
Description
给一张个迷宫,问能否从起点走到终点,只能往上下左右走,不能斜着走
Input
多组测试数据,每组第一行两个正整数,分别为n和m
表示n这个迷宫有n行m列(0<n,m<10)
接着是n行m列,
'#'表示路
‘*’表示墙
‘S’表示起点
‘T’表示终点
Output
每组测试数据输出一个结果,如果能从S走到T,输出“YES”,否则输出“NO”
Sample Input
2 2
S*
#T
3 3
S*#
#T
##
Sample Output
YES
NO
HINT
Source
/*
BFS,广度优先搜索,类似于树的层序遍历。
所以,写BFS的关键在于确定每一层的元素。
首先要确定起点,然后拿出起点来看一下是否为终点,如果是,则结束搜索。
如果不是,就以此点为扩展,扩展出与它相连的点并且没有看过的点作为下一层的元素。。
每层的元素都可以扩展0个到多个元素作为下一层元素。然后一层一层一个一个拿出来看是不是终点。
从上述可以看出,先进先出,可以维护一个队列。每次拿出一个元素来看是不是终点,不是的话就把它可以扩展出来的并且没有访问过的下一层元素加入到队列中~,直到拿出来的是终点或者队列已空
/
Ac_code:
/
本题应该注意:不能用%c一个一个字符读入然后没读一行加getchar(),这样写提交会过不了,应该尽量避免使用getchar(),这里使用%s一行一行读入就能AC
*/
#include <bits/stdc++.h>
using namespace std;
char a[15][15];
int vis[15][15];
int n,m;
struct date
{int x;int y;
};
date s,p;
queue<date>q;
int step_x[]= {-1,1,0,0},step_y[] = {0,0,-1,1};
int BFS()
{while(!q.empty()){p = q.front();vis[p.x][p.y] = 1;q.pop();if(a[p.x][p.y] == 'T')return 1;else{for(int i = 0; i < 4; i++){s.x = p.x + step_x[i];s.y = p.y + step_y[i];if(s.x>=0&&s.x<n&&s.y>=0&&s.y<m&&!vis[s.x][s.y]&&a[s.x][s.y]!='*'){q.push(s);}}}}return 0;
}
int main()
{while(~scanf("%d%d",&n,&m)){while(!q.empty()){q.pop();}for(int i = 0; i < n; i++){scanf("%s",a[i]);for(int j = 0; j < m; j++){vis[i][j] = 0;if(a[i][j] == 'S'){s.x = i;s.y = j;q.push(s);}}}if(BFS())printf("YES\n");elseprintf("NO\n");}return 0;
}
BFS(入门题--迷宫)相关推荐
- 【新手上路】语法入门算法入门题单
作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...
- 【算法】BFS刷题总结
姊妹篇(DFS) 目录 一.入门级 P1747 好奇怪的游戏 TRDD got lost again 二.进阶 final的BFS Abbott's Revenge 一.入门级 P1747 好奇怪的游 ...
- 二叉树学习——简单入门题
入门题一: 输入一颗二叉树,你的任务是按从上到下.从左到右的顺序输出各个节点的值.每个节点都按照从根节点到它的移动序列给出 (L表示左,R表示右).在输入中,每个节点的左括号和右括号之间没有空格,相邻 ...
- poj pku图论、网络流入门题总结、汇总
poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...
- 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)
[HDU 2612 Find a Way(BFS)](兼BFS入门笔记) 原题入口: http://acm.hdu.edu.cn/showproblem.php?pid=2612 第一篇在CSDN的博 ...
- 蓝桥杯 BFS经典题 —— 卡片换位(单走华容道)
BFS 经典题,可能答案不是最优的,参考一下也是可以的 ^ _ ^ . DFS 相关文章如下所示: <算法笔记>-- "迷宫求解" 之 深度优先搜索(DFS) < ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- POJ - 1469 COURSES (匈牙利算法入门题)
题意: P门课程,N个学生.给出每门课程的选课学生,求是否可以给每门课程选出一个课代表.课代表必须是选了该课的学生且每个学生只能当一门课程的. 题解: 匈牙利算法的入门题. #include < ...
- bfs:01迷宫(洛谷P1141)
洛谷传送门 解析 乍一看:bfs板子题 冰法师最棒了 然鹅 看了一眼数据范围 心中已有画面 <面 堂 发 黑> 怎么办嘞? 我们想到: 因为该题来与去的可逆性 我们搜一次后,这些点以后都不 ...
最新文章
- 数据分析利器Jupyter Notebook!
- 单镜头视觉系统检测车辆的测距方法
- HDU4160(最小路径覆盖问题)
- Windows Embedded Compact 7新特性
- id3决策树 鸢尾花 python_C4.5决策树Python代码实现
- SAP Spartacus List Component 里定义的待显示 Popover 内容,如何传递到 Popover Component 里的?
- PHP转换时间戳mktime,php日期转换为时间戳的方法
- 机器学习方法_机器学习大拿253页新书:可解释机器学习方法的局限籍(附下载)...
- 机器视觉入门 Visual Studio 2015 配置 Opencv3.2
- 拖块拼图验证码PHP源码,滑动拼图验证码
- GNSS RTK 千寻位置 LG69T
- 计算机主机三维模型,三维模型
- 8queen(稍后补)
- html文件上传协议,模拟HTML表单上传文件(RFC 1867)
- 【思前享后】区块链架构与特点
- J1签证的“两年美国境外居住要求”是指什么?
- JAVA 导出Excel 单元格合并
- 【图像分类案例】(10) Vision Transformer 动物图像三分类,附Pytorch完整代码
- 有参构造器(方法)和无参构造器(方法)的作用(区别)
- 最新的SpringCloud(H版Alibaba)技术(11-12初级部分,网关【Gateway】)
热门文章
- red hat 6 安装php,Red hat linux服务器简明安装手册(OpenSSL+Mysql+Apache2+PHP)
- python中什么可变_Python中的可变类型与不可变类型
- 简述ospf的工作原理_简述洛氏硬度计的工作原理及应用领域
- 使用github上已有的开源项目
- 再见!妈妈再也不用担心我的计算机基础!
- 字节跳动python面试_字节跳动的面试感受
- jstorm mysql_zookeeper,kafka,jstorm,memcached,mysql流式数据处理平台部署
- 卷积云神经网络_2018.10
- 安卓开发 登录用户信息缓存_小程序云开发之用户注册登录
- php网站需要装zend吗,php-zend网站也需要别名