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

Enumerating all mazes of given size n*m

我想枚举所有可能的大小为 n*m 的迷宫(例如,这是一个 3*4 的迷宫)。我在 Python 程序中这样做,但遇到了麻烦。 我以为我可以在较小的区域中分解表面,从较小尺寸的迷宫列表中选择一个并连接起来,但我发现它很笨重。 有没有更优雅、更便宜的方法?

我想:

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

第一步是找到可能的开始和结束单元格对。这对线程对同样适用 对称性(旋转和镜像。)

更简单的版本是起点和终点之间的路径穿过所有单元格。在那种情况下,问题与在(网格)图中找到所有汉密尔顿路径相同。检查这个 question.

更现实的版本是迷宫可以有死胡同。在那种情况下,迷宫图是一棵以起始单元为根的树,结束单元是叶子。这比上层版本更一般。在这种情况下,问题是找到具有这些属性的树。作为第一个版本,我会采用简单的实现方式。 从起始单元开始 DFS 并首先找到到结束单元的路径,然后从不同于结束单元的某个路径单元开始遍历未访问的单元。