的方式来填补的n×m,网格数(Number of ways to fill a nxm grid)

2019-09-26 08:08发布

我在编程的书,我没能解决遇到以下问题:

给定一个n×m的网格,写一个递归算法找到的办法,这电网可以通过3X1和1×3块填充的数量。

我的3×M个网格逻辑:

发现可用于填充栅格的一侧M挡的组合的数量。

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

可能有人请指教? 谢谢。

Answer 1:

position是左上角,并且此后网格的第一未填充的时隙(从左到右然后从上到下)。 最多有两种方式放置在块postion 。 尝试在放置一个1×3水平块position ,并调用在剩余的网格中的递归函数。 尝试在放置一个3×1垂直块position ,并且调用该递归函数。 注意,如果有,是把块不合法的方式(在末尾,例如,说有只有一个2x2平方左右),该计划的这个分支未能找到解决办法。 这是因为电网必须由3X1块填充。

你的逻辑是不是递归的 - 这是一个组合的方式,试图来算。 但只要一格并不大,计算机有足够的内存来实际尝试所有组合。 如果可能涉及这种方法在书中,将是巨大递归解决其他问题。

这里的方法签名的想法

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



文章来源: Number of ways to fill a nxm grid