【问题标题】:Find largest square submatrix找到最大的平方子矩阵
【发布时间】:2019-09-27 09:17:35
【问题描述】:

我正在尝试从可以包含不同数字的矩阵中找到具有相同数字的最大方形子矩阵

我找到了一些似乎与这个问题相同的答案,但没有任何带有方形子矩阵的答案

    int[,] dp = new int[a.GetLength(0), a.GetLength(1)];
    for (int i = 0; i < a.GetLength(0); i++)
    {
        for (int j = 0; j < a.GetLength(1); j++)
        {
            if (i == 0 || j == 0)
                dp[i, j] = 1;
            else
            {
                if (a[i, j] == a[i - 1, j] &&
                    a[i, j] == a[i, j - 1] &&
                    a[i, j] == a[i - 1, j - 1])
                {
                    dp[i, j] = (dp[i - 1, j] > dp[i, j - 1] &&
                                dp[i - 1, j] > dp[i - 1, j - 1] + 1) ?
                                                        dp[i - 1, j] :
                                (dp[i, j - 1] > dp[i - 1, j] &&
                                 dp[i, j - 1] > dp[i - 1, j - 1] + 1) ?
                                                         dp[i, j - 1] :
                                                  dp[i - 1, j - 1] + 1;
                }
                else dp[i, j] = 1;
            }
        }
    }

               {{7, 4, 7, 7, 7, 7},
                {7, 4, 7, 7, 7, 7},
                {7, 7, 1, 7, 7, 7},
                {7, 7, 3, 7, 9, 7},
                {1, 1, 7, 7, 1, 7},
                {7, 7, 7, 5, 7, 7}}; I expect to get the top right 3x3 submatrix containing 7's

【问题讨论】:

    标签: c# math matrix submatrix


    【解决方案1】:

    您的算法几乎可以正常工作,您应该只在前面的数字相等时更改条件。

        dp[i, j] = Math.Min(Math.Min(dp[i - 1, j], dp[i, j - 1]), dp[i - 1, j - 1]) + 1;
    

    这样你就有了下一个解决方案:

    1,1,1,1,1,1
    1,1,1,2,2,2
    1,1,1,1,2,3
    1,2,1,1,1,1
    1,1,1,1,1,1
    1,1,1,1,1,1
    

    每个数字表示是否存在具有先前数字的子矩阵,向上和向左看。所以最大的子矩阵是带 3 的子矩阵,从 (0,4) 位置开始,到 (2,6) 位置结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 2014-12-29
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      相关资源
      最近更新 更多