找到最大的矩形区域,在给定的MxN板中只包含两种类型的字母

时间:2010-02-21 17:52:42

标签: c++ geometry computational-geometry

可能重复:find largest submatrix algorithm


我需要帮助解决问题。

MxN行的每一行中,M板以N个字母(az)表示,我必须找到最大的区域,其中只有两种类型的字母它。该区域必须具有矩形形状。这是一个例子:

4x4:

AAAA
ABBC
BBCA
DCAA

输出为6,因为只有两种字母的最大矩形区域位于AAA-ABB的上角,只有A和B(2种类型)。

2 个答案:

答案 0 :(得分:1)

一些想法:

  1. 我认为你必须进行详尽的搜索。但是,一旦找到符合条件的区域A矩形,就不需要查看任何小于A的区域的矩形。

  2. 任何包含至少3个不同字母的大小为2x2或1x3的矩形都不能成为解决方案的一部分。也许您可以先“标记”这些区域,然后再通过输入进行第二次扫描,只考虑不包括那些标记区域的矩形。

  3. 找到符合条件的1x1矩形(即每个单元格)。查看此矩形是否可以在一个方向或另一个方向上展开,并且仍然符合条件。继续,直到它无法向任何方向扩展并仍然符合标准。可能存在矩形可以在任一方向上展开的情况:您需要回溯以检查这些情况(在您的示例中,左上角的2x2可以在任一方向上展开)。这听起来像是一个搜索问题 - 阅读一些搜索技术。

答案 1 :(得分:0)

不是一个完整的工作解决方案,但可能是解决此问题的方向:

尝试根据连接区域表示电路板,每个区域代表一个或多个包含相同字母的连接位置。然后尝试组合区域。