【问题标题】:Python3- Fill up a 2 dimensions array with the distance to one elementPython3-用一个元素的距离填充一个二维数组
【发布时间】:2020-04-06 15:23:46
【问题描述】:


我正在研究迷宫解决方案。我必须找到迷宫的最短路径并返回一个类似“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]

有人可以帮我吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    如果我们在 xy 平面上想象一个二维网格,那么两个节点之间的距离就是 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]
    

    【讨论】:

    • 我点击解决太快了。事实上,在你的返回数组中, element[3][1]=2 应该等于 3。你必须考虑到你不能穿过墙这一事实。但编写代码可能并不那么容易..
    • 您可以尝试使用 NetworkX,它提供了许多不错的图论工具供您使用。如果您想使用代码解决它,我建议您尝试编写一个步进器。您尝试首先在 y 平面上朝目标走下,如果周围有一堵墙。然后你踏入 x 平面,四处走动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2011-07-28
    • 1970-01-01
    • 2015-01-24
    • 2015-10-22
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多