我遇到了C程序的问题,其中给出了带有地雷的2D数组(mines =数组字段设置为1)。 我需要找到从(0,0)到(x-1,y-1)的最短路径,你只能在4个方向上移动(上,下,左,右)。
你有什么想法,算法应该是什么样子才能让程序变得相当简单?
答案 0 :(得分:3)
A *和Dijkstra比这个问题更复杂,因为在你正在搜索的图表中,所有边(网格方格之间的步长)都有权重1.
只需使用广度优先搜索:
Let Q be a queue of (x,y) pairs
Let V be a set of (x,y) pairs.
Add the start point (x0,y0) to Q.
While Q is not empty
H = Q.get_head
for each neighbor pair N of H in the grid
if N is not in V
add N to V
if N is the goal
Return N. The path is the chain of N.prev references
N.prev = H
Q.add_to_tail(N)
Return "goal could not be reached"
答案 1 :(得分:0)
使用Dijikstra的算法。它将解决O(x * y)时间
中的问题答案 2 :(得分:0)
您也可以尝试A-Star(参见wikipedia entry)。它是Dijkstra算法的扩展,它的最坏情况运行时间是O(| E |),但可以通过使用启发式来改进。 A-Star将找到通过该区域的最低成本路径,在您的情况下,您将使用的成本将是行进的总距离。
考虑到你对运动的限制,你可能最好使用“曼哈顿距离”#39;试探法。