迷宫从所有起点解决

时间:2016-07-25 02:35:06

标签: algorithm depth-first-search breadth-first-search

最近我遇到了一个问题: 假设迷宫中包含字符*.C*表示墙,. / C是允许的。只有一个标记C。现在,如果机器人站在任何允许的点上,则存在一系列命令(例如LDDRULLLRRDU等),这样如果机器人从任何允许点开始,它就会通过C至少一次。
例如:

******
*.C..*
**.***
*....*
******

命令:RLLURUU

现在我知道如何使用DFS / BFS解决迷宫(用于最短路径)。但是,任何人都可以提出如何处理这样的问题的提示吗? 编辑:如果下一步进入墙/外迷宫,它将被忽略。和往常一样LR正确U向上D向下。

1 个答案:

答案 0 :(得分:2)

此问题与有限自动机的synchronizing words重置序列的概念有关。你可以想象建立一个自动机

  1. 每个开放空间加上C,是一个州;
  2. 除了C之外的每个状态都会在每次碰到墙壁时移动到自身;
  3. 如果在该方向上有一个开放点,则除了C之外的每个状态在指示的方向上转换到相邻的打开状态;和
  4. C状态在所有动作中都会自动转换。
  5. 鉴于此自动机,您现在正在寻找一个将每个状态转换为C状态的序列,因此连接到同步字。有许多用于查找同步字的算法,并且它们中的任何一个都可以适用于解决这个特定问题。一个选项是build the power automaton from the original automaton并寻找从开始状态到C状态的路径,(我相信)最终成为评论中关于将虚拟机器人折叠在一起的理论上的最佳版本(因为它总会找到最佳路径。)