填充nxm网格的方法数

时间:2013-11-04 02:26:17

标签: java algorithm recursion combinations

我在编程手册中遇到了以下无法解决的问题:

给定一个nxm网格,编写一个递归算法,找出3x1和1x3块可以填充此网格的方式。

我对3 x M网格的逻辑:

找出可用于填充网格边M的块组合数。

我不知道如何改变逻辑以解决上述问题。

有人可以提出建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

position为左上角,然后是网格的第一个未填充的插槽(从左到右,从上到下)。最多有两种方法可以将块放在postion。尝试在position放置1x3水平块,并在剩余网格上调用递归函数。尝试在position放置一个3x1垂直块,并在其上调用递归函数。观察一下,如果没有合法的方法来放置一个块(例如,最后说,只剩下一个2x2的方格),程序的这个分支就找不到解决方案了。那是因为网格必须用3x1块填充。

你的逻辑不是递归的 - 它是一种组合方法,试图计算。但是只要网格不是很大,计算机就有足够的内存来实际尝试所有的组合。如果你可以将这种方法与书中递归解决的其他问题联系起来,那就太棒了。

以下是方法签名的概念

int blockFillings(boolean[][] grid, int posx, int posy)