//这题之前用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(入门题--迷宫)相关推荐

  1. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

  2. 【算法】BFS刷题总结

    姊妹篇(DFS) 目录 一.入门级 P1747 好奇怪的游戏 TRDD got lost again 二.进阶 final的BFS Abbott's Revenge 一.入门级 P1747 好奇怪的游 ...

  3. 二叉树学习——简单入门题

    入门题一: 输入一颗二叉树,你的任务是按从上到下.从左到右的顺序输出各个节点的值.每个节点都按照从根节点到它的移动序列给出 (L表示左,R表示右).在输入中,每个节点的左括号和右括号之间没有空格,相邻 ...

  4. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

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

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

  6. 蓝桥杯 BFS经典题 —— 卡片换位(单走华容道)

    BFS 经典题,可能答案不是最优的,参考一下也是可以的 ^ _ ^ . DFS 相关文章如下所示: <算法笔记>-- "迷宫求解" 之 深度优先搜索(DFS) < ...

  7. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  8. POJ - 1469 COURSES (匈牙利算法入门题)

    题意: P门课程,N个学生.给出每门课程的选课学生,求是否可以给每门课程选出一个课代表.课代表必须是选了该课的学生且每个学生只能当一门课程的. 题解: 匈牙利算法的入门题. #include < ...

  9. bfs:01迷宫(洛谷P1141)

    洛谷传送门 解析 乍一看:bfs板子题 冰法师最棒了 然鹅 看了一眼数据范围 心中已有画面 <面 堂 发 黑> 怎么办嘞? 我们想到: 因为该题来与去的可逆性 我们搜一次后,这些点以后都不 ...

最新文章

  1. 2017c 语言程序设计,C语言程序设计第一次作业(2017.10.10完成)
  2. python绘制表格界面_python 读取 excel 生成 html 页面
  3. Android studio的sdk tools下没有LLDB的解决办法
  4. oracle数据同步异常,案例:DataGuard同步异常问题处理记录
  5. word2007文档无法编辑怎么办
  6. python能熔断吗_在大型项目上,Python 是个烂语言吗?
  7. P4782 【模板】2-SAT 问题
  8. [C#][Quartz]帮助类
  9. 美标AWG与国标MM线径、电流换算对照表
  10. 自己整理的几个免费的李炎恢php实战开发教程
  11. 设计模式 - 抽象工厂模式案例
  12. python和R的区别
  13. 英语语法基础(适合入门者)--第一章:词、单词
  14. 土木工程结构力学————钢架的位移法
  15. ie6, ie7兼容性问题以及处理办法汇总
  16. Python中pass的作用
  17. 树莓派4b安装Android10
  18. json数据和对象的区别
  19. matlab symbol filled,策略交易 - MATLAB - 掘金量化
  20. POI解析文档内容(txt,doc,docx,xls,xlsx,ppt,pdf)

热门文章

  1. java中的md5加密_java中的MD5加密
  2. pythoncgi模块文档_python使用cgi模块处理表单
  3. linux内核模块实验,linux内核模块实验(2学时)
  4. spark-sql执行时报错:
  5. SpringBoot Controller接收参数的几种常用方式
  6. Scrapy爬取整个美女网爬下来,要多少有多少
  7. GitHub:除非真正需要,否则我们不会删除您的任何内容
  8. 他因为泼了李彦宏一瓶水,成功圈粉无数,成为「网红」
  9. mysql触发器 生僻字_MySQL生僻字插入失败的处理方法(Incorrect string value)
  10. php 怎么写原生sql,thinkphp 原生sql 怎么写?