受我们启发,我们跳塔,并且与2D Maze Minus 1D相关
介绍
您的任务是找到遵循指定规则的最短路径,以摆脱阵列迷宫。
挑战
具有n个元素的一维数组a可以看作是由n个点组成的迷宫,其中索引k的点与k + a [ k ]和k - a [ k ]的点以单向方式连接。换句话说,可以向前或向后跳恰好一个 [ ķ从与索引点]步骤ķ。索引超出数组范围的点被视为迷宫之外。
为了说明这一点,请考虑以下数组,
[0,8,5,9,4,1,1,1,2,1,2]
如果我们现在位于第5个元素,则由于元素为4,我们可以将第4步向前跳到第9个元素,或者将第4个步向后跳到第一个元素。如果执行后者,我们将以元素0结束,这表明不可能进一步移动。如果执行前者,由于第9个元素为2,因此我们可以选择跳到第11个元素,它又是2,然后我们可以再次跳至“第13个元素”,这超出了阵列,并认为是迷宫的出口。
因此,如果我们从中间的元素开始,一种摆脱迷宫的方法是向后跳1步,向前4步,向前2步,再次向前2步,这可以表示为array [-1,4,2,2]
。另外,您也可以使用数组来表示它,该数组[4,8,10,12]
记录所有中间点和最终点的从零开始的索引(也可以从1开始的索引),也可以只是符号[-1,1,1,1]
。
从低折射率端逃脱迷宫也可以。
使用第一种表示法并从同一元素开始[1,1,1,2,2]
也是一种解决方案,但由于不是5步而是4步,所以它不是最佳的。
该任务是找出最短路径以走出阵列迷宫并输出该路径。如果有多个最佳路径,则可以输出其中的任何一个或全部。如果没有解决方案,则应输出从有效路径中可以辨别的,由您选择的虚假值(完全不产生任何输出也是可以的)。
为了简单起见,数组中的元素数始终是奇数,我们总是从中间的元素开始。
测试用例
测试用例说明了各种形式的输出,但是您不限于这些。
Input
Output
[0,8,5,9,4,1,1,1,2,1,2]
[-1,4,2,2]
[2,3,7,1,2,0,2,8,9]
[2,9] (or [2,-5] or [[2,9],[2,-5]])
[0,1,2,2,3,4,4,4,3,2,2,3,0]
[1,-1,1,1]
[0,1,2,2,4,4,6,6,6,6,6,4,2,1,2,2,0]
[]
眼镜
[1,1,1,-1]
代替[-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
输出[[-1,4,2,2]]
)