Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 迷宫中的最短路径_Arrays_Algorithm_Dynamic Programming_Shortest Path - Fatal编程技术网

Arrays 迷宫中的最短路径

Arrays 迷宫中的最短路径,arrays,algorithm,dynamic-programming,shortest-path,Arrays,Algorithm,Dynamic Programming,Shortest Path,假设我们有一个迷宫,由一个字符的m*n数组表示。我们的任务是找到最快的移动顺序,以便将托架从起始位置E转移到结束位置S 数组的每个元素都有以下值之一: 意思是起始位置 E,表示完成位置 意思是障碍 ,意思是我们可以移动的开放空间 意思是传送。 每个传送站与所有其他传送站连接。只有马车可以通过远程传送,而不是人自己。这名男子随后必须移动到一个传送站,以取回马车 每一次,一个人可以向左(L)、向右(R)、向下(D)或向上(U)移动。当一个人和马车一起移动时,每一步花费2秒。如果一个人在没有马车的情况

假设我们有一个迷宫,由一个字符的m*n数组表示。我们的任务是找到最快的移动顺序,以便将托架从起始位置E转移到结束位置S

数组的每个元素都有以下值之一:

意思是起始位置

E,表示完成位置

意思是障碍

,意思是我们可以移动的开放空间

意思是传送。 每个传送站与所有其他传送站连接。只有马车可以通过远程传送,而不是人自己。这名男子随后必须移动到一个传送站,以取回马车

每一次,一个人可以向左(L)、向右(R)、向下(D)或向上(U)移动。当一个人和马车一起移动时,每一步花费2秒。如果一个人在没有马车的情况下移动,每一步需要1秒。使用传送系统总共需要2秒

例如:

阵列是:

S

T。T

。X E

最佳解决方案是:

下,下,右,右,下

时间成本为:

2+2=4,表示“向下,向下”

2,为了传送传送带的马车。我们没有马车继续前进

1+1+1=3,表示“右,右,右”。请注意,每一步的成本是1而不是2,因为我们移动时没有马车。我们现在再次选择马车

2表示“向下”。因为我们又选了马车

总成本:4+2+3+2=11

最后的回答:下,下,右,右,下

最适合该任务的算法是什么

到目前为止,我已经考虑了使用动态规划的可能性。这将导致一个O(m*n)解


我还考虑了应用某种Dijkstra的可能性,但我需要O(m*n)来创建图…

Warshall-floyd算法是dijkstaWell的一种流行替代算法,这是事实。然而,为了创建一个图,我可能需要mn边,这会产生O(mn)复杂度…为什么你认为你能比O(m.n)做得更好?在最坏的情况下,您可能必须查看矩阵中的每个单元格,即使是最佳路径也可能有许多类似于m.n/2的单元格,因此生成该路径已经需要O(m.n)时间。基本上相同的问题: