我们有一个 N x N 的雷区(二维数组),地雷的坐标以另一个 M x 2 的数组给出。如何找到从左上角到右下角的最短路径,而不踩在雷上?请提供最佳算法。
我们有一个 N x N 的雷区(二维数组),地雷的坐标以另一个 M x 2 的数组给出。如何找到从左上角到右下角的最短路径,而不踩在雷上?请提供最佳算法。
G=(V,E)
V = { (x,y) | for all x,y such that (x,y) is not a mine }
E = { ((x1,y1),(x2,y2)) | (x1,y1) is adjacent to (x2,y2) }
BFS(x_source,y_source, x_target,y_target):
queue = empty new queue
queue.add(Pair(x_source,y_source))
parent= new dictionary
parent.add(source, None)
while (queue.empty() == false):
curr = queue.dequeue()
currX = curr.first
currY = curr.second
if (currX == x_target && currY == y_target)
return getPath(dict, curr)
for each neighbor u of curr: //u is a pair of (x,y) coordinates of adjacent cell
if u is not a key in parent:
parent[u] = curr
queue.add(u)
getPath(dict, target):
sol = [] //empty list
curr = target
while curr != None:
sol.addFirst(curr)
curr = dict.get(curr)
A*
算法,请看这里:https://dev59.com/XX_aa4cB1Zd3GeqP7cTT 如果你想要最好的算法,那么你应该根据哪些方面/条件来指定(性能、空间/时间复杂度、行数等)。 - Spektre