Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找出矩阵被递归切片的块数_C#_Recursion - Fatal编程技术网

C# 找出矩阵被递归切片的块数

C# 找出矩阵被递归切片的块数,c#,recursion,C#,Recursion,我最近得到了一个赋值,其中我有4对5矩阵,0和1(0代表矩阵的切割部分)。我需要找到一种方法来计算矩阵将被分割多少块,正如我提到的,零表示矩阵的切割部分,所以如果从一个边界到另一个边界是零的直线,这意味着矩阵是在这条直线上被分割的,例如(在这张图中,我标记了矩阵将被分割的位置,零的一条线将其分割): 所以伙计们,我知道你们不会为我完全解决这个代码,我不需要,但我需要的是理解这一点: 首先,我应该如何告诉编译器在哪个方向(当他要抛出矩阵时)他应该去,我对枚举有一个想法 第二,我应该使用什么样的条

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

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

  • 首先,我应该如何告诉编译器在哪个方向(当他要抛出矩阵时)他应该去,我对枚举有一个想法
  • 第二,我应该使用什么样的条件语句,编译器可以识别零行(如果有)
    任何帮助都将不胜感激:)

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

  • 四通八达
  • 不要以0为条件来创建线,但是试着看看1,找出它们属于哪一块
  • 这方面的一般算法可实现如下:

  • 创建一个大小相同的辅助矩阵、一个函数来为您提供一个新符号(例如,在要求符号时增加一些数字),以及一个数据结构来存储冲突
  • 从任何地方开始向四个方向行进
  • 每当你在原始矩阵中找到一个0时,向你要从那里开始的每个新方向发出一些新的符号
  • 只要找到1,就尝试将值存储在帮助器矩阵中。如果已经存在一个值,则:

  • 在碰撞数据结构中存储发现2个符号之间发生碰撞的数据

  • 不要从这个方向继续

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

    您的矩阵是一个双倍大小的数组吗?1。您使用的编译器应该知道(或关心)哪些“方向”?你的算法应该对此负责。如果您知道
    If
    语句,那么您还应该知道如何将一个值与
    0
    @进行比较。我知道If语句以及我将使用枚举的方向,但我仍然不知道如何向编译器描述如何保存一行零。。。。我也有一个想法,但我只是想得到一些建议,如何让它更快更清晰。对于数组,它没有说,所以我想是的,它是两倍大小的数组,至少我要用的是:D