找出用递归切片的矩阵数

时间:2017-03-04 12:08:38

标签: c# recursion

我最近得到了一个分配,其中我有4对5矩阵,0和1(零代表矩阵的切割部分)。我需要找到一种方法来计算将切割多少个矩阵,正如我所提到的,零代表矩阵的切割部分,因此如果从一个边界到另一个边界是零的直线,则意味着矩阵在该线上被切割,例如(在这张照片中我标记了矩阵将被分割的位置,一条零切片线):

enter image description here

所以,我知道你不会完全为我解决这个代码,我不需要那个,但我需要的是理解这个:

  1. 首先,我应该如何告诉编译器方向(当他要扔矩阵时)他应该去,我有一个想法。
  2. 其次,我应该使用什么样的条件句子,编译器会识别零线(如果有的话)?
  3. 任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

您没有为算法指定任何要求(例如时间和空间复杂度),因此我猜一个与某些特定解决方案相关的答案是:

  1. 全方向前进
  2. 不要在0上设置条件来创建该行,但是请尝试查看1并查找它们属于哪一块。
  3. 这种通用算法可以实现如下:

    1. 创建一个相同大小的辅助矩阵,一个给你一个新符号的函数(例如,在任何时候要求符号增加一些数字),以及一个存储碰撞的数据结构
    2. 从任何地方开始向所有4个方向前进
    3. 每当你在原始矩阵中找到0时,向你要去的每个新方向发出一个新符号
    4. 每当找到1时,请尝试将值存储在辅助矩阵中。如果那里已有值,那么:

      1. 存储在您发现2个符号之间发生碰撞的碰撞数据结构

      2. 不要从这个方向继续任何方向。

    5. 这将最多遍历每个单元格4次,因此时间复杂度为O(n),当您完成后,您将拥有包含所有冲突的数据结构。 现在,您需要做的就是组合其他数据结构中的所有条目,以收集您真正拥有的多少独特部分。