【发布时间】:2016-07-25 02:35:06
【问题描述】:
最近我遇到了一个问题;
假设一个迷宫有字符 *,.,C .* 代表墙壁,./C 是允许的。只有一个点标记为C。现在给定一个机器人站在任何允许的点上,存在一系列命令(例如LDDRU 或LLLRRDU 等),这样如果机器人从任何允许的点开始,它就会通过C 在至少一次。
例如:
******
*.C..*
**.***
*....*
******
命令:RLLURUU
现在我知道如何使用 DFS/BFS(最短路径)来解决迷宫问题。但是任何人都可以提供有关我将如何处理此类问题的提示吗?
编辑:如果下一步是进入墙壁/外部迷宫,它会被忽略。和往常一样 L 向左 R 向右 U 向上 D 向下。
【问题讨论】:
-
水平移动的最远距离是 3 步;所以在例如之后; LLL,你只能在网格中的三个位置;再一个R,你可以在垂直走廊的三个位置;在 UU 之后你肯定会通过 C。所以一般来说:做一些移动来减少你可能在的位置的数量,然后跟踪你所有可能的机器人,并让每个机器人通过 C,使用“如果有墙,机器人就不动”规则。每次两个可能的机器人最终在同一个方格上时,移除其中一个。
-
@m69,感谢您的回答。但更清楚地说,您能否使用给出的示例并解释您得出答案的逻辑......谢谢!
-
3行有9个可能的位置;在 LLL 之后,任何机器人都将位于其所在行的最左侧位置,因此现在您只有 3 个可能的位置;在另一个 R 之后,3 个机器人将在左二位置(垂直走廊);在 UU 之后,他们都会在 C 上结束。
-
所以你从有多少位置的“虚拟”机器人开始,然后任何遇到另一个机器人的机器人都被移除,任何通过 C 的机器人都被移除,直到你没有机器人left(表示都经过C)。
-
@JimMischel (不是很清楚地表述)问题是关于找到一个从每个起始位置都起作用的序列,而不是确定给定序列的起始位置。
标签: algorithm depth-first-search breadth-first-search