1215:迷宫

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 29437     通过数: 8772

【题目描述】

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

【输入】

第1行是测试数据的组数kk,后面跟着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”。

【输入样例】

2
3
.##
..#
#..
0 0 2 2
5
.....
###.#
..#..
###..
...#.
0 0 4 0

【输出样例】

YES
NO

【分析】

走迷宫问题是DFS经典问题,这道题用深搜(DFS)容易超时,最好用广搜(BFS),因为题目只需要判断是否存在通路,并未要求找出所有通路,故使用BFS最佳,但本题放在DFS处,需要注意以下几个问题。

(1)探索四个方向,避免重复遍历通常采用以下三种方法。

  • 类似1191:流感传染题目,及时更新矩阵
  • 设置vis数组,用于记录访问标记;
  • 不做记号,沿途修改,类似水洼题目,填水坑为平地。http://47.110.135.197/problem.php?id=4255

(2)需要进行边界判断处理。

【参考代码】

#include <stdio.h>
#include <string.h>char a[105][105];       //迷宫矩阵
int n;                  //迷宫规模
int vis[105][105];      //访问数组 int ha,la;              //起始点坐标(A点)
int hb,lb;              //终止点坐标(B点) int dx[4]={0,0,-1,1};   //方向数组
int dy[4]={-1,1,0,0};   //方向数组int flag;               //状态位(终点判断)void dfs(int x, int y)
{int i,nx,ny;if(flag==1){return;}if(x==hb && y==lb)  //到达终点 {flag=1;return;}for(i=0;i<4;i++){nx=x+dx[i];      //四个方向探索,地址偏移ny=y+dy[i];if(flag==0 && nx>=0 && nx<n && ny>=0 && ny<n && a[nx][ny]== '.' && !vis[nx][ny]){vis[nx][ny]=1;     //或 去掉vis数组,直接填坑,a[nx][ny]='#; dfs(nx,ny);//vis[nx][ny]=0;   //本题不用回溯,否则超时}}return;
}int main()
{int i,j,l,k;scanf("%d",&k);while(k--){scanf("%d",&n);memset(a,0,sizeof(a));memset(vis,0,sizeof(vis));for(i=0;i<n;i++)scanf("%s",&a[i]);scanf("%d %d %d %d",&ha,&la,&hb,&lb);if(a[ha][la]=='#' || a[hb][lb]=='#'){printf("NO\n");flag=0;continue;}dfs(ha,la);if(flag==1)printf ("YES\n");elseprintf ("NO\n");flag=0;}return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1215

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

  1. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

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

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

  3. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  4. [信息学奥赛一本通][POJ 2251]地牢大师

    来源:<信息学奥赛一本通> , POJ 2251 算法标签 BFS 题目描述 你现在被困在一个三维地牢中,需要找到最快脱离的出路! 地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接 ...

  5. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  6. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  7. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  8. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

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

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

  10. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

最新文章

  1. Mysql与sqlite注意
  2. iOS开发-NSString去掉所有换行及空格
  3. 艾宾浩斯记忆表格excel_好的记忆方法是一切学习的关键(艾宾浩斯记忆法)
  4. 央视-腾讯发布报告:九成受访者认为AI 距离自己并不遥远
  5. C#图片按指定大小分割
  6. java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果
  7. Hadoop系列之ToolRunner与GenericOptionsParser用法
  8. Java集成openCV实现图片背景切换
  9. 机器人应用(Skill)精选丨让HEXA机器人成为直播网红,还可以接收红外信号
  10. FDD/TDD协同优化
  11. php如何替换ico图标,wordpress网站怎么设置更换站点favicon ico图标
  12. Python 编码检测与编码转换
  13. 【改变键盘上方向键蹩脚的位置】通过autohotkey脚本实现键盘按键重映射【便利码代码】--以上下左右键映射为capslock与hjkl组合的按键 【附源码】
  14. wsbm服务器错误怎么修复,如何使用ab测试上传文件
  15. windows更改密码脚本_如何更改您的Windows密码
  16. 宜信davinci搭建
  17. 浙江大学计算机科学博士生导师名单,浙江大学计算机科学技术学院博士研究生导师简介:孙建伶...
  18. [已解决]EIsevier模板中hyperref包冲突导致无法修改标注颜色
  19. zz一篇很赞同的文章:2008年以后房价会降?想都不要想
  20. android布局高度大于屏幕高度,Android CoordinatorLayout + AppbarLayout + Viewpager布局超过屏幕高度...

热门文章

  1. dede设置当前栏目的样式
  2. 基本类型--枚举类型和位标志
  3. 手把手教你用直方图、饼图和条形图做数据分析(Python代码)
  4. python svm 决策方程_python – 使用scikit-learn线性SVM提取决策边界
  5. 美国国家安全局是如何入侵你的电脑的?
  6. 再现暴力裁员!患病员工被关小黑屋,摄像头监控,工作量超其他人!
  7. SAP 采购流程和销售流程
  8. 架构设计 | 接口幂等性原则,防重复提交Token管理
  9. Java描述设计模式(23):访问者模式
  10. springmvc框架原理分析