Python3-填充到一个元素的距离的二维数组

时间:2020-04-06 15:23:46

标签: python-3.x multidimensional-array maze


我正在研究迷宫分辨率。我必须找到迷宫的最短路径,然后返回类似“ 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]

有人可以帮我吗?

谢谢

1 个答案:

答案 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]