C++ 给定0和1的2d数组,使用回溯法查找其中的所有正方形

C++ 给定0和1的2d数组,使用回溯法查找其中的所有正方形,c++,arrays,algorithm,backtracking,C++,Arrays,Algorithm,Backtracking,在此二维阵列中,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表示点,0表示空白区域。 例如,此阵列:

1 0 0 0 1
0 0 1 0 0
0 0 0 0 0
0 0 0 0 1
我的答案应该是2,因为在这个数组中有2个正方形(或矩形),就像这样

所有的点都应该使用,如果所有的点都已经被使用了,你就不能再做一个矩形了(比如我们不能从中间的点到右上角的另一个正方形),因为它们都已经在其他方块中使用了,如果至少一个角没有被使用,你可以使用任意点多次。 我可以将其作为一个实现问题来解决,但我不理解回溯如何与这个问题相关。


提前感谢。

回溯,让我们看看您的问题的另一个可能答案,您列出了:

  • {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开始迭代,并在每行左移,试图找到所有可能的解决方案,将给出我的结果。

您的#1是错误的。它跨越3x2,而不是正方形。对不起,正方形或矩形。没有4?(0 | 0)到(2 | 1),(0 | 0)到(4 | 3),(4 | 0)到(2 | 1)和(2 | 1)到(4 | 3)吗不,因为它们都已经被使用了,所以你不能将(使用点)与另一个使用点一起使用。你真的需要详细说明你的需求是什么。到目前为止,你已经错过了关键信息。