【题目描述】

一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n的格点组成,每个格点只有2种状态,‘.’和‘#’,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为‘#’),则看成无法办到。

【输入】

第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n(1≤n≤100),表示迷宫的规模是n×n的。接下来是一个n×n的矩阵,矩阵中的元素为‘.’或者‘#’。再接下来一行是4个整数ha,la,hb,lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha,la,hb,lb全部是从0开始计数的。

【输出】

k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。

思路在代码中

#include<bits/stdc++.h>
using namespace std;
int n;
bool ans,vis[105][105];//ans代表最终结果,vis则是搜索中的判断
char a[105][105];//存储迷宫
struct app{int x;int y;
};
app walk[5];//行走方式
app be,en;//be为起点坐标,en为终点坐标
void bfs(int x,int y){queue<app> Q;app q={x,y};Q.push(q);while(!Q.empty()){app bq=Q.front();//队最前坐标 if(bq.x==en.x&&bq.y==en.y){//搜索到 ans=1;return ;}for(int i=1;i<=4;i++){app aq;int bx=bq.x+walk[i].x,by=bq.y+walk[i].y;if(bx<=n&&bx>=1&&by>=1&&by<=n){if(!vis[bx][by]&&a[bx][by]=='.'){//入队列条件判断 vis[bx][by]=1;aq.x=bx;aq.y=by;Q.push(aq);//入队 }} }Q.pop();//出对 }return ;
}
int main(){int k;cin>>k;walk[1].x=1;walk[2].x=-1;walk[3].x=0;walk[4].x=0;walk[1].y=0;walk[2].y=0;walk[3].y=1;walk[4].y=-1;//初始移动方式 for(int i=1;i<=k;i++){ans=0;cin>>n;memset(vis,0,sizeof(vis));//这步必须,否则与上一次搜索重复 for(int j=1;j<=n;j++){for(int l=1;l<=n;l++){cin>>a[j][l];}}cin>>be.x>>be.y>>en.x>>en.y;be.x+=1;be.y+=1;en.x+=1;en.y+=1;//统一加一,方便处理边界 vis[be.x][be.y]=0;//起点先标记 bfs(be.x,be.y);if(ans){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}

【信息学奥赛一本通】1215:迷宫(bfs版)相关推荐

  1. 信息学奥赛一本通(C++)版在线评测系统 1000 入门测试题目

    1000  入门测试题目 时间限制: 1000 ms         内存限制: 32768 KB 提交数: 254022     通过数: 152601 [题目描述] 求两个整数的和 [输入] 一行 ...

  2. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  3. 经典问题的另类解法——以信息学奥赛一本通c++版1216红与黑为例

    题目链接:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 题目描述: 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动 ...

  4. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  5. 1001:Hello,World! 【信息学奥赛一本通(C++版)在线评测系统】

    「原题」 1001:Hello,World! 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 0 通过数: 0 [题目描述] 编写一个能够输出"Hello,World!& ...

  6. 1000:入门测试题目 【信息学奥赛一本通(C++版)在线评测系统】

    为了更好的阅读体验,建议您移步至我的博客园来阅读此文章. 传送门 「原题」 1000:入门测试题目 时间限制: 1000 ms 内存限制: 32768 KB 提交数: 0 通过数: 0 [题目描述] ...

  7. 信息学奥赛一本通(C++版) 网站补充题目

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 网站补充题目 http://ybt.ssoier ...

  8. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  9. 信息学奥赛一本通 第五版(C++版)

    信息学奥赛一本通 第五版(C++版)第一部分 C++语言 第一章 C++语言入门 第二节 C++语言程序设计 P15 1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接 ...

  10. 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)

    信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...

最新文章

  1. cobbler 无人值守-安装
  2. MVC架构 在Android中的使用
  3. [IE]微软发布IE9预览版- 建议Web开发者开始研究SVG
  4. 关于Dockerfile那些事: 基础镜像的坑
  5. php7协程通信使用,PHP7下的协程实现
  6. hdu 2686 Matrix 最大费用最大流
  7. java编写排序的代码_在Java 8之前,您编写了几行代码来对对象集合进行排序?...
  8. python defaultdict 简单了解
  9. 2017.6.4 problem b 失败总结
  10. mooc中习题--简单运算器
  11. 机器学习(6)——朴素贝叶斯(文本分类)
  12. 极性大小判断技巧_别愣着了,来分析分析正极性半波整流电路!
  13. 百度网盘解压显示服务器错误,百度网盘、Winrar等解压文件解压出错怎么办?
  14. 激光粒度仪测试原理及详情解答【注解】
  15. 团队作业1--团队展示
  16. java如何调用手机拍照功能_手把手教你如何实现拍照功能
  17. 苹果IAP内购验证工具类
  18. 【大数据开发】SparkSQL——Spark对接Hive、Row类、SparkSQL函数、UDF函数(用户自定义函数)、UDAF函数、性能调优、SparkSQL解决数据倾斜
  19. 使用 psycopg2 时遇到的两个坑
  20. [房产热点] 揭曝中国房地产十大绝密“潜规则” 一看吓一跳

热门文章

  1. 开拓新城· 西安 | 时速云签约陕建数科容器云平台项目,携手赋能建筑行业数智生产变革
  2. 怎样修改iTunes的备份目录(win7环境下)
  3. zookeeper配置zoo.cfg及客户端
  4. 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(3)
  5. 《C++ Primer Plus》第17章:输入、输出和文件(2)
  6. python回归分析代码_python代码实现回归分析--线性回归
  7. 为什么我加了过滤器然后就登不进去了_禁止装前置过滤器?很多业主为此与物业起争执,后才明白错怪物业...
  8. texstudio的坑
  9. ros下创建节点后运行总是出现[rospack] Error: package '***' not found
  10. LIDC-IDRI肺结节数据集xml解释及读取