Как проверить содержится ли один двумерный массив в другом?
Думал только, что можно вычитать из большего меньший и если там будет столько же нулей, как в меньшем, значит он содержит в себе этот массив. Но если первый массив значительно больше другого, то проверить будет сложно.
Ответы (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;
}
Писал на коленке, не тестировал, так что прошу меня извинить, если не работает. :)
