枚举给定大小为n * m的所有迷宫

时间:2017-05-05 10:17:23

标签: python combinatorics

我想列举所有可能的大小为n * m的迷宫(例如,这是一个3 * 4迷宫enter image description here)。我在Python程序中这样做,并且很难这样做。 我想我可以在较小的区域中分解表面,从较小尺寸和连接的迷宫列表中选择一个,但我觉得它很笨重。 是否有更优雅和廉价的方法?

1 个答案:

答案 0 :(得分:0)

我想:

  • 迷宫有开始和结束单元格,
  • 开始和结束单元格之间应该有唯一的路径,
  • 必须访问每个单元格。

第一步是找到可能的起始和结束单元对。对于相同的线程对,这是很好的 对称性(旋转和镜子。)

更简单的版本是开始和结束之间的路径通过所有单元格。在这种情况下,问题与在(网格)图中找到所有哈密尔顿路径相同。请检查此question

更现实的版本是迷宫可以有死角。在那种情况下,迷宫图是以起始单元为根的树,结束单元是假。这是比上层版本更普遍的情况。在这种情况下,问题是找到具有这些属性的树。作为第一个版本,我将使用简单的实现。 从起始单元格生成DFS并首先找到结束单元格的路径,之后该遍历不会从与结束单元格不同的某个路径单元格开始访问单元格。