Recherche de rectangles dans une grille à deux blocs

Disons que j'ai une grille de blocs, 7x12. Nous utilisons les couleurs '*','%','@' et une cellule vide '-'.

1 2 3 4 5 6 7
- - - - - - -  1
- - - - - - -  2
% % - - - - -  3
% % - - - - *  4 
% % - - - @ %  5
@ @ @ - - @ %  6
@ @ * * * - *  7
* * * % % % %  8 
% @ @ % * * %  9
% @ % % % % %  10
* * * % % @ @  11
* * @ @ @ @ *  12

Je veux trouver des rectangles dans cette grille d'une certaine taille minimale, et le plus grand que je peux trouver, puis les plus petits jusqu'à ce qu'aucun des rectangles supérieure ou égale à la taille minimale peut être trouvé.

Dans cet exemple, considérez la taille minimale 1x4, 4x1, 2x2 donc un 1x3 n'est pas valide, mais une 2x3 est. Si nous voulons que le plus grand des rectangles, nous trouvons ce qui suit:

  • 4x1 (4,8)
  • 5x1 (3,10)
  • 2x3 à (1,3)
  • 2x2 (6,1)
  • 2x2 (1,11)
  • 4x1 (3,12)

Noter que les rectangles ne peut pas être dans l'espace, ils ne peuvent pas se chevaucher. Par exemple, la 2x2 rectangle (4,10) n'est pas mentionné car il recoupe le 5x1 rectangle (3,10).

Tous sont parfaitement valables rectangles: elles sont égales ou plus grandes que la taille minimum et tous les blocs par rectangle sont de la même couleur.

Ce que je veux, c'est de le faire par programmation. Lorsque vous dites à quelqu'un de trouver des rectangles dans une grille, il trouve tout de suite, sans réfléchir. La question est, comment puis-je écrire un algorithme qui fait la même chose?

J'ai considéré bruteforcing mais j'ai besoin de l'algorithme à exécuter aussi vite que possible car il devra être exécuté beaucoup dans un très petit laps de temps limité (mobile) de l'appareil.

Je vois beaucoup de questions sur l'internet au sujet des rectangles, mais je suis un peu surpris de cela il n'a pas été demandé partout. Je pense trop difficile ou n'a jamais voulu faire quelque chose comme cela?

source d'informationauteur Sebazzz