dado un m matriz n * con los posibles valores de 1, 2 y null:encontrar todas las áreas rectangulares con ciertas propiedades en una matriz
. . . . . 1 . .
. 1 . . . . . 1
. . . 2 . . . .
. . . . 2 . . .
1 . . . . . 1 .
. . . . . . . .
. . 1 . . 2 . .
2 . . . . . . 1
Estoy buscando para todos los bloques B (que contienen todos los valores entre (x0, y0) y (x1, y1)) que:
- contienen al menos un '1'
- no contienen '2'
- no son un subconjunto de un otro bloque con las propiedades anteriores
Ejemplo:
El área roja, verde y azul todos contienen un '1', no '2', y no son parte de un área más grande. Por supuesto, hay más de 3 bloques en esta imagen. Quiero encontrar todos estos bloques.
¿cuál sería una forma rápida de encontrar todas estas áreas?
Tengo una solución de fuerza bruta en funcionamiento, iterando sobre todos los rectángulos posibles, comprobando si cumplen los dos primeros criterios; luego iterando sobre todos los rectángulos encontrados, eliminando todos los rectángulos que están contenidos en otro rectángulo; y puedo acelerar eso eliminando primero filas y columnas idénticas consecutivas. Pero estoy bastante seguro de que hay una manera mucho más rápida.
Todos los bordes de estos bloques estarán en el borde del gráfico o junto a un "2". Quizás puedas hacer algo con eso. – robert
Si no obtuvo una buena respuesta aquí, también puede solicitarla en http://cs.stackexchange.com. –