给定 0 和 1 的二维数组,使用回溯找到其中的所有正方形
Posted
技术标签:
【中文标题】给定 0 和 1 的二维数组,使用回溯找到其中的所有正方形【英文标题】:Given 2d array of 0s and 1s, find all the squares in it using backtracking 【发布时间】:2016-12-13 12:30:43 【问题描述】:在这个二维数组中,1 代表一个点,0 代表空白区域。 例如这个数组:
1 0 0 0 1
0 0 1 0 0
0 0 0 0 0
0 0 0 0 1
我的答案应该是 2,因为像这样的数组中有 2 个正方形(或矩形)
所有的点都要用,不能再做正方形 |矩形,如果它的所有点都已被使用(就像我们不能从中间的点到右上角的点制作另一个正方形),因为它们都已在其他正方形中使用,您可以多次使用任何点,只要至少有一个角是未使用的点。 我可以将它作为一个实现问题来解决,但我不明白回溯与这个问题有什么关系。 提前致谢。
【问题讨论】:
你的 #1 是错误的。它跨越 3x2,不是正方形。 抱歉,正方形或矩形。 不是有4个吗? (0|0) 到 (2|1)、(0|0) 到 (4|3)、(4|0) 到 (2|1) 和 (2|1) 到 (4|3) 不行,因为它们都已经用过了,所以你不能用(用过的点)和另一个用过的。 你真的需要详细说明你的要求是什么。到目前为止,您错过了重要的信息。 【参考方案1】:回溯,让我们看看您列出的另一个可能的问题答案:
0,0 到 (2,1 0,0 到 4,0作为一种解决方案,另一种解决方案是(关于该点可以多次使用,只要一个点未使用):
4,0 到 2,1(第一次使用 4,0 和 2,1) 0,0 到 2,1(第一次使用 0,0) 0,0 到 4,4(第一次使用 4,4)这是 3 步,带有回溯,旨在向您展示使用递归的替代结果。在这个等式中,如果你从计算数组不同区域的正方形的起始位置开始,你可以获得不同的结果。
例如,迭代从 0,0 开始,然后向右遍历每一行尝试查找以 [0,0] 开头的所有可能的矩形,这将给出您提供的解决方案,从 4,0 开始迭代,然后向左遍历每个试图找到所有可能的解决方案的行将给出我的结果。
【讨论】:
以上是关于给定 0 和 1 的二维数组,使用回溯找到其中的所有正方形的主要内容,如果未能解决你的问题,请参考以下文章