我在编程的书,我没能解决遇到以下问题:
给定一个n×m的网格,写一个递归算法找到的办法,这电网可以通过3X1和1×3块填充的数量。
我的3×M个网格逻辑:
发现可用于填充栅格的一侧M挡的组合的数量。
我不知道如何改变,以解决上述问题的逻辑。
可能有人请指教? 谢谢。
我在编程的书,我没能解决遇到以下问题:
给定一个n×m的网格,写一个递归算法找到的办法,这电网可以通过3X1和1×3块填充的数量。
我的3×M个网格逻辑:
发现可用于填充栅格的一侧M挡的组合的数量。
我不知道如何改变,以解决上述问题的逻辑。
可能有人请指教? 谢谢。
让position
是左上角,并且此后网格的第一未填充的时隙(从左到右然后从上到下)。 最多有两种方式放置在块postion
。 尝试在放置一个1×3水平块position
,并调用在剩余的网格中的递归函数。 尝试在放置一个3×1垂直块position
,并且调用该递归函数。 注意,如果有,是把块不合法的方式(在末尾,例如,说有只有一个2x2平方左右),该计划的这个分支未能找到解决办法。 这是因为电网必须由3X1块填充。
你的逻辑是不是递归的 - 这是一个组合的方式,试图来算。 但只要一格并不大,计算机有足够的内存来实际尝试所有组合。 如果可能涉及这种方法在书中,将是巨大递归解决其他问题。
这里的方法签名的想法
int blockFillings(boolean[][] grid, int posx, int posy)