您的位置  > 互联网

(每日一题)硬件电路我就不说了

1. 让我们从一个相对简单的迷宫开始,我称之为“二叉树”迷宫。 即每个节点最多可以连接三个分支。 换句话说,当你面临岔路口时,你最多只有三个。 选择是左转、右转或返回。

如果我们将左转编码为0,右转编码为1,那么从迷宫入口到出口的路径就是一串二进制代码。 对于最短路径,我们可以让机器人多走几次迷宫,得到一系列二进制字符串,其中数字最少的就是“局部最短路径”。 我们还可以利用这些二进制串来获得迷宫的“局部拓扑结构”,即二叉树结构。

请注意,我在上面的结果中添加了“部分”一词。 这是因为如果机器人走迷宫的次数不够,或者少于迷宫中路径的总数,我们得到的结果将是不完整的。 只有当机器人走迷宫的次数足够多,走遍迷宫中的所有路径时,我们才能得到完整的结果。 然而,这对于大多数迷宫来说是无法实现的,也就是说,我们得到的结果都是局部的,最多趋向于全局结果。

不知道大家注意到没有,还有一种情况我上面没有编码,那就是回滚。 这个问题处理起来比较复杂,所以不能只用一个二进制码来表示。 必须有专门的处理机制。

这个机制分为三个方面,

一种是一次只退一步,即当无路可走时,回到上一个分叉处,选择另一条分支。 该程序是将当前的二进制串减少一位,并改变改变后的二进制串的值。 否定最后一位数字意味着选择另一个分支。

其次,退一步后,如果还是无路可走,就再退一步,重复上述过程,直到出现岔路口。

第三,在整个回滚过程中,记录并保存每次回滚的路径,即左右转的二进制代码。 回滚过程就是从开始后退到开始前进的整个过程。 这些二进制串之所以被保留,是因为通过它们可以推导出迷宫的一些局部拓扑结构。

2、熟悉了上面的“二叉树迷宫”后,通过下面的方法设计一个通用的迷宫

1、估计迷宫的最大分支数,即迷宫中某个岔路口的最大分叉路数。 这里假设是一个

2. 使用a作为二进制码对每个分叉进行编码。 例如,我们可以对其进行顺时针编码。

3、将“二叉树迷宫”的一位二进制的a替换为二进制代码,其他步骤可类似。

当然,我们也可以用变长的二进制码来表示一次路径选择,但是这样我们就必须记录并保存每次选择对应的二进制码的长度。

补充:

上面的算法很笼统,但是总体思路很清晰,那就是:迷宫的入口是根节点,每个路口是一个节点,每个分叉是一个分支,每个分支都使用一定数量的二进制码编码使用树结构来表示迷宫的拓扑,因此迷宫的路径可以表示为从树的根节点到某个叶节点的路径。

在硬件电路中,主要有两个方面的设计:一是前向和后向状态的识别和转换;二是前向和后向状态的识别和转换。 二是货叉的识别和选择。

以上均为个人观点,并不全面。 希望大家能够指正并补充。