Voici implémentation O (n) en C# en utilisant la programmation dynamique. Fondamentalement, vous construisez une autre matrice de plus grande taille (y compris lui-même) pendant que vous lisez chaque cellule de la matrice.
public static int LargestSquareMatrixOfOne(int[,] original_mat)
{
int[,] AccumulatedMatrix = new int[original_mat.GetLength(0), original_mat.GetLength(1)];
AccumulatedMatrix[0, 0] = original_mat[0, 0];
int biggestSize = 1;
for (int i = 0; i < original_mat.GetLength(0); i++)
{
for (int j = 0; j < original_mat.GetLength(1); j++)
{
if (i > 0 && j > 0)
{
if (original_mat[i, j] == 1)
{
AccumulatedMatrix[i, j] = Math.Min(AccumulatedMatrix[i - 1, j - 1], (Math.Min(AccumulatedMatrix[i - 1, j], AccumulatedMatrix[i, j - 1]))) + 1;
if (AccumulatedMatrix[i, j] > biggestSize)
{
biggestSize = AccumulatedMatrix[i, j];
}
}
else
{
AccumulatedMatrix[i, j] = 0;
}
}
else if ((i > 0 && j == 0) || (j > 0 && i == 0))
{
if (original_mat[i, j] == 1) { AccumulatedMatrix[i, j] = 1; }
else { AccumulatedMatrix[i, j] = 0; }
}
}
}
return biggestSize;
}
Quel travail avez-vous fait jusqu'à maintenant? Nous n'allons pas simplement répondre à cela pour vous. – chrisaycock
Votre question est quelque peu impérative ... –
Je suis assez sûr que cette question exacte a été posée ici sur Stack Overflow avant, peut-être il y a un an ou deux. – ShreevatsaR