计算2D网格中的帧

ho_*_*ago 5 algorithm matrix

给定[NxM]由0和1组成的矩阵.找到此矩阵中没有1(每个单元格为0)的方框数.固定方框的框架是一组单元,它们中的每一个是最左边,最右边,最顶部或最底部的单元之一.因此,边长为1的方框包含1个单元,边长2包含4个,边长3-8个单元,边长4-12个单元.

大小为4的示例框架是:

0000
0  0
0  0
0000
Run Code Online (Sandbox Code Playgroud)

我们需要计算仅由0组成的方框数.

示例Let N=3M=4和矩阵为:

0100
0100
0000
Run Code Online (Sandbox Code Playgroud)

然后答案是12,因为有10个一个大小的帧和2个两个大小的帧.

主要问题是N,M可以达到1 ? N,M ? 2000.所以O(N^2)方法是必需的.

Zso*_*ter 0

框架总是有一个左上角0。因此,您可以迭代矩阵(对于 N 和 M 内部),并在每次迭代中计算左上角元素为 的所有帧0。在你的例子中:

0100
0100
0000
Run Code Online (Sandbox Code Playgroud)
  1. 对于N=1并且M=1您可以找到1框架。
  2. 接下来是N=1M=2。就可以找到0框架了。
  3. 对于N=1M=3你可以找到2.

等等...

  • 但这需要 O(N^3)。 (2认同)