微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取网格节点的邻居

如何解决获取网格节点的邻居

我正在做一个寻路可视化工具,我需要获取节点的邻居,以便对它们执行我想要制作邻​​接列表的算法,然后只更新颜色,但问题是当我尝试用一个节点的行和列及其邻居输出错误的东西,我将解释我的意思以及为什么会发生问题我只是不知道如何阻止它:

def get_neighbors(grid):
    neighbors = {}

    for row in grid:
        for col in row:
            directions = [(grid.index(row) + 1,row.index(col)),(grid.index(row) - 1,(grid.index(row),row.index(col) - 1),row.index(col) + 1)]
            neighbors[row.index(col)] = [directions[0],directions[1],directions[2],directions[3]]
    return neighbors

我知道有更好的方法来实现我尝试做的事情,即在矩阵中取一个节点并为该节点分配一个键,其值是矩阵中该点的上下左右节点,所以如果有人能提出更好的方法并写作,我将不胜感激。

我对这个实现的问题是它输出以下内容(我只会给出几个例子而不是整个输出,因为它太多了):

{0: [(20,0),(18,(19,-1),1)],1: [(20,1),2)],2: [(20,2),3)]..}

如您所见,(行,列)元组中的行部分始终为 20,因为这是网格中的总行数,因此问题在于它输出仅位于最后一行的行的索引迭代 我怎样才能让我的输出看起来像这样:

{0: [(1,(-1,(0,1: [(2,(1,2: [(3,(2,3)]

所以基本上使行的工作方式与此特定示例中的列的工作方式相同

解决方法

使用 enumerate 获取包含元素索引和元素索引的元组:

def get_neighbors(grid):
    neighbors = {}
    for j,row in enumerate(grid):
        for i,col in enumerate(row):
            neighbors[len(neighbors)] = [(i+1,j),(i-1,(i,j-1),j+1)]
    return neighbors

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。