让我们假设我们有一个由m * n char数组表示的迷宫。我们的任务是找到最快的移动顺序,以便将一个滑架从起始位置E转移到完成位置S.
数组的每个元素都具有以下值之一:
S,意思是起始位置
E,意思是结束位置
X,意思是障碍
。 ,意思是我们可以移动的开放空间
T,意思是传送。 每个远程端口都与所有其他远程端口相连。只有马车可以通过传送而不是人自己发送。该男子后来必须转移到一个传送回来。
每次,男人可以向左移动(L),向右移动(R),向下移动(D)或向上移动(U)。当一个人随着马车移动时,每个步骤花费2秒。如果一个人在没有马车的情况下移动,每一步都需要1秒。使用传送系统总共需要2秒钟。
示例:
数组是:
S. 。
。 。 。
是的。 。 Ť。 。 X E
最佳解决方案是:
向下,向下,向右,向右,向右
时间成本是:
2 + 2 = 4,对于"向下,向下"
2,为了发送带有传送的马车。我们继续没有马车。
1 + 1 + 1 = 3,对于"对,对,对" 。请注意,每个步骤花费1而不是2,因为我们移动没有马车。我们现在再次选择马车。
2 for" Down" 。 2因为我们再次选择了马车。
总费用:4 + 2 + 3 + 2 = 11。
最终答案:向下,向下,向右,向右,向下
With是最适合该任务的算法吗?
到目前为止,我已经考虑过使用动态编程的可能性。虽然这会导致O(m * n)解决方案......
我也考虑过应用某种Dijkstra的可能性,但我需要O(m * n)才能创建图形...