微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用广度优先搜索在迷宫中找到最短路径

如何解决使用广度优先搜索在迷宫中找到最短路径

我有一个编码问题,我应该找到机器人在迷宫中从给定起点到终点的最短路径。输入的格式如下: 输入第一行的两个数字 (R,C),给出迷宫中的行数和列数,后面是 R 行输入,每行由 C 个字符组成。迷宫的起点标记为 S,终点标记为 E。散列 (#) 代表迷宫中的墙壁,点 (.) 代表迷宫中的自由正方形。因此,示例输入如下所示:

6 5
S....
.#...
..E..
.....
#....
#...#

机器人可以在所有四个方向上移动,所需的输出是写出机器人要遵循的方向,以最短路径引导他从 S 到 E。我正在考虑使用标准的广度优先搜索。但是,存在这样一种情况,即一旦机器人开始向一个方向移动,它就无法停止,直到撞到墙壁 (#) 或到达迷宫的一端。使用标准的广度优先搜索可以让我找到最短路径,但它没有考虑到这种情况。你能建议如何修改算法来工作吗?

谢谢。

解决方法

如果你想最小化距离:

你所要做的就是在坐标中添加一个额外的布尔值来说明方向是否垂直。当且仅当它碰到墙壁或迷宫的一端(使路径一分为二)时,才可以更改布尔值。正是在这一刻,您必须将方向的选择推入与每条路径相关联的堆栈上。

如果使用布尔值存储已经遇到的节点,它将允许路径交叉但不会重复。使用广度优先算法,你会在第一次遇到终点时找到最短路径。与路径关联的堆栈是您搜索的结果。

如果您想尽量减少订单数量

您必须更改算法中定义邻居的方式:对于所有四个方向,您都尝试尽可能远,并在达到限制时停止。每个方向的邻居是您到达的最后一个单元格。如果最后一个单元格已经被访问过,则它是无效的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。