[英]Number of ways to fill a nxm grid
我在编程书中遇到以下无法解决的问题:
给定一个nxm网格,编写一个递归算法以查找3x1和1x3块填充该网格的方式。
我的3 x M网格逻辑:
查找可用于填充网格的边M的块组合的数量。
我不知道如何更改逻辑来解决上述问题。
有人可以请教吗? 谢谢。
设position
为左上角,然后为网格的第一个未填充插槽(从左到右,然后从上到下)。 最多有两种方法可以将块放置在postion
。 尝试将1x3水平块放置在position
,然后在其余网格上调用递归函数。 尝试将3x1垂直块放置在position
,然后在该position
调用递归函数。 请注意,如果没有合法的方式放置块(例如,最后说仅剩2x2的正方形),则该程序的该分支无法找到解决方案。 那是因为网格必须由3x1块填充。
您的逻辑不是递归的,而是一种组合方法,试图计算在内。 但是只要网格不是很大,计算机就有足够的内存来实际尝试所有组合。 如果您可以将此方法与书中递归解决的其他问题联系在一起,那将会很好。
这是方法签名的想法
int blockFillings(boolean[][] grid, int posx, int posy)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.