Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 填充nxm网格的方法数_Java_Algorithm_Recursion_Combinations - Fatal编程技术网

Java 填充nxm网格的方法数

Java 填充nxm网格的方法数,java,algorithm,recursion,combinations,Java,Algorithm,Recursion,Combinations,在我的编程书中,我遇到了以下无法解决的问题: 给定一个nxm网格,编写一个递归算法,找出3x1和1x3块可以填充该网格的方式数 我的3 x M网格逻辑: 查找可用于填充网格M侧的块组合数 我不知道如何改变逻辑来解决上述问题 有人能给点建议吗?谢谢。将位置设为左上角,然后从左到右再从上到下设置网格的第一个未填充插槽。最多有两种方法可以在位置处放置块。尝试在位置处放置一个1x3水平块,并在剩余网格上调用递归函数。尝试在位置处放置一个3x1垂直块,并在该位置上调用递归函数。注意,如果没有合法的方法在末

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

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

我的3 x M网格逻辑:

查找可用于填充网格M侧的块组合数

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

有人能给点建议吗?谢谢。

将位置设为左上角,然后从左到右再从上到下设置网格的第一个未填充插槽。最多有两种方法可以在位置处放置块。尝试在位置处放置一个1x3水平块,并在剩余网格上调用递归函数。尝试在位置处放置一个3x1垂直块,并在该位置上调用递归函数。注意,如果没有合法的方法在末尾放置一个块,例如,假设只剩下一个2x2的正方形,那么程序的这个分支无法找到解决方案。这是因为网格必须由3x1个块填充

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

这里是方法签名的概念


int blockFillingsboolean[]grid,int posx,int posy

您已经尝试了什么,您在哪里卡住了?这是一个相当困难的问题,有很多小尴尬的案例。一个好的彻底的回答可能非常长;所以你需要指出受访者应该包括哪些内容,以及哪些内容可以安全地省略。实际上,编写一个算法非常容易。它没有要求有效的实现,OP的计数方法可能更优越。