我正在尝试创建一种方法,使我得到一个0和1的方阵,其中1可以行走,0是除随机起点和终点之外必须克服的障碍。
我需要这种方法来使我对应该遵循的路径有所了解,例如:
返回值分别是“右,上,右,右,下,右”和“下,右,下,右,右,上,右,上”。
谢谢
答案 0 :(得分:0)
一种方法可能是编写一个函数,该函数检查当前字段是否为目标字段,并为所有邻居递归调用此函数。在每个递归步骤中,您都将添加方向并在完成后返回完整路径。
dest_x = 4
dest_y = 1
visited = []
def next (path, x, y):
visited.append ([x, y])
# obstacle
if matrix[x][y] == 0:
return None
# found destination
if x == dest_x and y == dest_y:
return path
for i in [{'x': x - 1, 'y': y, 'direction': 'left'},
{'x': x + 1, 'y': y, 'direction': 'right'},
{'x': x, 'y': y - 1, 'direction': 'up'},
{'x': x, 'y': y + 1, 'direction': 'down'}]:
if [i['x'], i['y']] not in visited and i['x'] >= 0 and i['x'] < len(matrix) and i['y'] >= 0 and i['y'] < len(matrix[x]):
n = next (path + [i['direction']], i['x'], i['y'])
if n != None:
return n
matrix = [[1,1,1,1],
[1,1,1,1],
[1,0,0,1],
[1,1,1,1],
[1,1,1,1]]
print (next ([], 0, 1))
如果有一种方法,它将找到一种方法。万一您需要最短的方法,可以在到达目的地时将路径存储在数组中,而不是返回路径。找到所有路径后,您可以打印最小长度的路径