Как проверить содержится ли один двумерный массив в другом?

Думал только, что можно вычитать из большего меньший и если там будет столько же нулей, как в меньшем, значит он содержит в себе этот массив. Но если первый массив значительно больше другого, то проверить будет сложно.

Пример


Ответы (1 шт):

Автор решения: aepot

Примерно так оно может выглядеть. Самое сложное в написании данного кода - догадаться разбить решение на 2 метода.

private bool ContainsMatrix(int[,] big, int[,] small)
{
    int smallWidth = small.GetLength(1);
    int smallHeight = small.GetLength(0);
    int bigWidth = big.GetLength(1);
    int bigHeight = big.GetLength(0);

    if (smallHeight > bigHeight || smallWidth > bigWidth)
        return false;

    for (int i = 0; i < bigHeight - smallHeight + 1; i++)
    {
        for (int j = 0; j < bigWidth - smallWidth + 1; j++)
        {
            if (Compare(big, small, i, j))
                return true;
        }
    }
    return false;
}

private bool Compare(int[,] big, int[,] small, int rowOffset, int colOffset)
{
    for (int i = 0; i < small.GetLength(0); i++)
    {
        for (int j = 0; j < small.GetLength(1); j++)
        {
            if (small[i, j] != big[i + rowOffset, j + colOffset])
                return false;
        }
    }
    return true;
}

Писал на коленке, не тестировал, так что прошу меня извинить, если не работает. :)

→ Ссылка