NOIP--迷宫
NOIP习题练习+讲解:
链接:https://pan.baidu.com/s/17m6r2ZTMAmtb7dbvPQ0z-A
提取码:4rpg
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V6的分享
【问题描述】
鹏鹏在一个迷宫里困住了。
迷宫是长方形的,有n行m列个格子。一共有3类格子,空地用字符’.’表示,墙壁用’#’表示,陷阱用’*’表示。特别地,迷宫中有两个特殊的格子:起点用’S’表示;终点用’E’表示。起点和终点都是空地。(’S’和’E’均为大写字母)
鹏鹏的任务是:从起点出发,沿着某条路径,走到终点。
游戏对路径的要求有三条:每次只能向相邻格子(上/下/左/右)移动一步;不能经过墙壁(即可以经过空地和陷阱);不能走出迷宫边界。
聪明的你请告诉鹏鹏,他能完成任务吗?如果能,鹏鹏能否不经过任何陷阱就完成任务呢?
【输入】
第一行为两个整数n,m(2≤n,m≤7)。
接下来有n行,每行是一个长度为m的字符串,依次表示迷宫的每一行格子。
【输出】
仅有一行,是一个字符串。
如果鹏鹏可以不经过任何陷阱就到达终点,输出”GOOD”;否则,如果经过若干陷阱能到达终点,输出”0K”;否则,输出”BAD”。(所有字母均为大写)
【样例输入1】
3 4
##.E
S*.#
...*
【样例输出1】GOOD
【样例输入2】
3 3
##E
S*.
#..
【样例输出2】OK
【样例解释】
##67
1*5#
234*
样例1的最优路线为1->2->3->4->5->6->7,如上图。
问题分析:
这道题就是一道搜索题,对每一个点进行深搜,在上下左右四个方向进行判断,看是否满足在迷宫地图内,如果不为墙壁,并且是陷阱或者空地都可以往前走,但是这里需要判断陷阱的情况,如果有一条路线不用经过陷阱就可以到达终点,就输出GOOD,如果能够达到终点,但是所有路线都必须经过陷阱,则输出OK,否则就是不能到达终点的情况输出BAD。利用深搜的特点把每一种可能性路线尝试一遍。
参考代码: