最新消息:

每日一题 | 迷宫

C++ 少儿编程 2245浏览 0评论
    今天给大家分享的是经典的迷宫问题。这道题也曾是2014年北京市小学生程序设计竞赛的第5道题目。迷宫问题的经典解法就是使用搜索算法。

    接下来我们一起来看一下题目的描述吧!

迷宫(labyrinth)

【问题描述】

    鹏鹏在一个迷宫里困住了。

    迷宫是长方形的,有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。利用深搜的特点把每一种可能性路线尝试一遍。

参考代码

 

每日一题 | 迷宫

每日一题 | 迷宫

每日一题 | 迷宫

转自公众号:
信息学少儿编程

您必须 登录 才能发表评论!