根据给定大小的非循环路径计算不同的矩形网格迷宫

时间:2013-02-25 09:06:57

标签: algorithm maze

我试图解决以下问题:

  

mn迷宫是一个mn矩形网格,其中墙壁放置在网格单元格之间,因此从左上角的正方形到任何其他正方形只有一条路径。   以下是912迷宫和1520迷宫的例子:

     

enter image description here

     

设C(m,n)是不同mn迷宫的数量。可以通过旋转和来自另一个迷宫的反射形成的迷宫被认为是不同的。

     

可以证实C(1,1)= 1,C(2,2)= 4,C(3,4)= 2415,C(9,12)= 2.5720e46(用科学计数法舍入)到5位有效数字)。
  找C(100,500)

现在,有一个明确的公式可以给出正确的结果,并且它是完全可计算的。但是,据我所知,Project Euler问题的解决方案应该更像是聪明的算法,而不是明确的公式计算。试图将解决方案表示为递归,我只能到达一个线性系统,其中变量的数量随着迷宫的大小呈指数增长(更确切地说,如果有人试图为mxn迷宫的数量写一个递归,其中m保持固定,一个到达线性系统,使得其变量的数量随m呈指数增长:其中一个变量是具有问题380的声明中给出的属性的mxn迷宫的数量,而其他变量是mxn迷宫的数量。在某些特定的配置中,不止一个连接的组件接触到迷宫的边界 - 并且这些配置的数量似乎随着m呈指数增长。所以,虽然这种方法是可行的m = 2,3,4等,它似乎不适用于m = 100)。

我还想把问题减少到可以更容易解决的子问题, 然后在构建更大的子问题解决方案时重用子问题解决方案(动态编程方法),但在这里我偶然发现子问题似乎涉及不规则形状的迷宫,同样,这种迷宫的数量在m,n中呈指数关系。

如果有人知道一种可行的方法(m = 100,n = 500),除了使用显式公式或一些特殊定理,并且可以暗示在哪里看,对我来说这将是非常有趣的。

4 个答案:

答案 0 :(得分:5)

这基本上是一个spanning tree计数问题。具体来说,它是计算网格图中生成树的数量。

在网格图中计算生成树

来自维基百科条目的“计算生成树”部分:

  

连接图的生成树的数量t(G)是a   充分研究的不变量。在某些情况下,很容易计算t(G)   直。例如,如果G本身就是一棵树,则t(G)= 1,而如果G   是具有n个顶点的循环图C_n,然后是t(G)= n。对于任何图G,   数字t(G)可以使用Kirchhoff's matrix-tree theorem ...

计算

相关算法

以下是一些与计算网格图中生成树数量相关的文章或帖子:

后者由Ekhad和Zeilberger提供以下内容,其答案与手头的问题相符:

  

如果你想看到显式表达式(作为z中的有理函数)   对于其Maclaurin中zn系数的正式幂级数   扩展(相对于z)会给你跨越的数量   m由n网格图组成的树(m的路径的笛卡尔积   顶点和长度为n)的路径,对于m = 2到m = 6,input   给出output

具体来说,请参阅output

旁注:如果没有提供的解决方案值,则有效的解释可能是迷宫的外部结构很重要。在这种情况下,具有相同路径的两个或更多个迷宫将是不同且不同的,因为在拐角处可以有3个用于进入和退出迷宫的选项,其中左上角将在顶部打开,左上角在左侧打开,或在左侧和顶部打开,类似的角落出口。如果试图将这些迷宫可能性表示为树,则两个节点可以在进入时收敛而不是仅仅从开始到结束发散,并且将存在一个或多个用于退出可能性的附加节点。这会增加C(m,n)的值。

答案 1 :(得分:4)

这里的见解来自问题(强调我的)

  

A ..迷宫是一个矩形网格,墙壁放置在网格单元格之间,因此从左上角正方形到任何其他正方形只有一条路径。

如果你想到迷宫的双重性,即人们可以占据的空间,很明显迷宫必须形成一个图形。不仅仅是任何图形,因为有一个单一路径,图形不能包含任何使其成为tree的周期。这种对组合学问题的减少表明了一种算法。根据欧拉计划的精神,其余部分留给读者练习。

答案 2 :(得分:1)

SPOILER AHEAD

我错了,在其中一条评论中说:“现在,关于在图表中生成树的概率有一个通用定理,但它似乎没有给出计算可行的方法来计算所寻求的数量”。作为矩阵树定理的“一般定理”归因于基尔霍夫,并且在这里的答案之一中提到,其结果不仅作为拉普拉斯图的非零特征值除以图的阶数的乘积。 ,但也作为拉普拉斯算子的任何辅助因子的绝对值,在这种情况下,它是49999x49999矩阵的行列式的绝对值。但是,尽管矩阵非常稀疏,但它仍然让我无法接触。

然而,参考

http://arxiv.org/pdf/0712.0681.pdf

(“块三对角矩阵的决定因素”,作者:Luca Guido Molinari), 允许将问题减少到评估整数100x100密集矩阵的行列式,并以非常大的整数作为条目。

此外,参考

http://www.ams.org/journals/mcom/1968-22-103/S0025-5718-1968-0226829-0/S0025-5718-1968-0226829-0.pdf

由Erwin H. Bareiss(通常只谈到“Bareiss算法”,但我使用的递归和参考文献中的公式(8)似乎是由于Charles Dodgson,又名Lewis Carroll :)),然后让我评估这个最后的决定因素,从而得到原始问题的答案。

答案 3 :(得分:-1)

我想说找到一个明确的公式是解决欧拉问题的正确方法。它会很快,可以缩放。只是去吧:)。