我正在研究迷宫分辨率。我必须找到迷宫的最短路径,然后返回类似“ LLURD”的字符串(使用的方向)。为了解决这个问题,我将其分解为几个步骤。一种方法是采用原始网格并返回一个网格,其中所有单元格都用一个数字标记,该数字是从该单元格到起点的距离。
我认为一个例子更不可理解:
输入:
[0,0,0,#,0]
[0,X,0,0,0]
[0,#,0,0,0]
[0,0,0,#,0]
“ X”是起点
“#”是一堵墙
我们可以上下左右移动
输出:
[2,1,2,#,4]
[1,X,1,2,3]
[2,#,2,3,4]
[3,4,3,#,5]
有人可以帮我吗?
谢谢
答案 0 :(得分:0)
如果我们在xy平面中想象一个2d网格,那么两个节点之间的距离就是x平面中的距离加上y平面中的距离。
g=[[0,0,0,'#',0],
[0,'X',0,0,0],
[0,'#',0,0,0],
[0,0,0,'#',0]]
def get_dist(start,end): #pass tuples of x,y
x1,y1=start
x2,y2=end
return abs(x1-x2)+abs(y1-y2)
def find_start(g): #if you already have it, ignore
for y,col in enumerate(g):
for x,item in enumerate(col):
if item=='X':
return x,y
start = find_start(g)
for y,col in enumerate(g):
for x,item in enumerate(col):
if item == 0: #if is not a start or wall
g[y][x]=get_dist(start,(x,y))
返回
[2, 1, 2, '#', 4]
[1, 'X', 1, 2, 3]
[2, '#', 2, 3, 4]
[3, 2, 3, '#', 5]