使用广度优先搜索来查找迷宫中的最短路径



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

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

机器人可以在所有四个方向上移动,所需的输出是为机器人编写方向,使其在最短的路径中从S到E。我正在考虑使用标准的广度优先搜索。然而,有一种情况是,一旦机器人开始向一个方向移动,它就无法停止,直到撞到墙(#(或到达迷宫的一端。使用标准的Breadh First Search可以让我找到最短的路径,但它没有考虑这个条件。你能建议如何修改算法以使其工作吗?

谢谢。

如果您想最小化距离:

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

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

如果您想最大限度地减少订单数量

你必须改变你在算法中定义邻居的方式:对于所有四个方向,你都尽量走得远,当达到极限时停止。每个方向的邻居是你到达的最后一个单元格。如果最后一个单元格已被访问,则该单元格无效。

最新更新