用python制作迷宫图

Posted

技术标签:

【中文标题】用python制作迷宫图【英文标题】:Making a graph of a maze in python 【发布时间】:2011-06-10 18:49:47 【问题描述】:

嘿,我正在尝试使用 Python 中的字典制作图表。我正在使用一个包含迷宫的txt 文件(b 代表墙壁,a 代表路径),并且我正在尝试制作一个字典,其中列出了迷宫中所有可能的移动(简单的步骤,而不是完整的路径)。关于我应该从哪里开始的任何想法?我从未使用过字典。

非常感谢您的帮助,这让我有了一个良好的开端。还有一个问题,我从一个有效的房子开始检查所有可能的路径。在那之后,生病必须搬到另一所房子并检查那里的路径。如何确保我不会出现无限循环或重新检查我已经检查过的房子?

【问题讨论】:

每个问题一个问题。在发布答案后编辑您的问题以现在包含一个新问题很烦人。 【参考方案1】:

假设你的迷宫看起来像一个网格,迷宫中的一个位置可以表示为一个元组 (row,col)。构建字典时,为迷宫中的每个位置创建一个条目,初始值为空列表。在迷宫中的每个有效位置 (r,c),确定是否可以到达 (r-1,c)、(r,c-1)、(r+1,c) 和 (r,c+ 1)。如果可以,则将该元组添加到列表中。所以,假设我可以从 (r,c) 到 (r-1,c) 和 (r,c+1),字典中的条目看起来像

  maze_dict[(r,c)] = [(r-1,c), (r,c+1)]

要创建一个空字典,您可以使用:

maze_dict = 

您还应该看看 Python 教程的 dictionaries 部分

【讨论】:

关于字典的快速问题,我可以获取可能的方法列表并添加到字典中吗?我不能“附加”一个键的值? 如果你得到了可能的方法列表,那么你可以迭代地将它们添加到字典中。在字典中,您不能修改键的值,因为它会破坏散列。 Daymor:您只需将键/值对写入字典。您可以将任意数量的内容放入其中。 我已经编写了关于如何获得一所房子可能的移动方式的代码。我的问题是,我如何在不重复的情况下检查所有这些? 检查所有这些是为了什么?顺便说一句,您可以将一个标志与每个动作相关联。如果设置了,那么你以前见过这个位置,如果没有,那么它是唯一的。【参考方案2】:

非常感谢您的帮助,这让我有了一个良好的开端。只是 还有一个问题,我从一个有效的房子开始检查所有 可能的路径。在那之后,我不得不搬到另一所房子去检查 那上面的路径。我怎样才能确保我没有无限循环或 重新检查我已经检查过的房子?

创建一个带有网格坐标的“House”类:

class House(object):
    def __init__(self, pos):
        self.pos = pos # the coordinates (position) on the grid, a tuple
        self.paths = [] # Empty array to hold paths

创建一些房子:

houses = [House((1,3)), House((3,3)), House((4,3))] # a list of houses

现在,穿过每个房子,计算它的路径

paths = 
paths[(1,3)] = [(2,3), (4,3) ... ] # possible paths to the point (1,3)

for i in houses:
    try:
       i.paths = paths[(i.pos)]
    except KeyError:
       print "I don't know how to get to ", i.pos

逐个浏览列表可确保您只检查每所房屋一次。现在您可以找出无法到达的房屋:

for i in houses:
   if not i.paths:
      print "I did not find a way to reach the house at ",i.pos

【讨论】:

以上是关于用python制作迷宫图的主要内容,如果未能解决你的问题,请参考以下文章

今天大佬带你做一个Python 小项目制作一个迷宫游戏附带源码

如何用 Python 制作 GIF 动图

如何在 Visual Studio 中为迷宫设计项目制作 C# 中的图片框?

如何在python中为具有多个索引的数据框制作堆叠图?

制作表情包Python拆分和合并GIF动态图(几行代码就搞定)

用 Python 堆积图