Algoritmo: determinar la forma de dos sectores delineados por una trayectoria arbitraria, y luego llenar uno

votos
2

NOTA: Este es un problema difícil para cualquiera que le guste los problemas de lógica, etc.

Considere una rejilla bidimensional rectangular de altura H y anchura W. Cada espacio en la red tiene un valor, ya sea 0 1o 2. Inicialmente, cada espacio en la parrilla es una 0, a excepción de los espacios a lo largo de cada uno de los cuatro bordes, que son inicialmente una 2.

Entonces considere una trayectoria arbitraria de espacios de rejilla adyacentes (horizontal o verticalmente). La ruta comienza en una 2y termina en una diferente 2. Cada espacio a lo largo del camino es una 1.

El camino se divide la red en dos sectores de 0espacios. Hay un objeto que se apoya en un no especificado 0espacio. El sector que no contiene el objeto debe ser llenado completamente con 2.

Definir un algoritmo que determina los espacios que deben convertirse 2a partir de 0, dada una matriz (lista) de valores ( 0, 1o 2) que corresponden a los valores en la cuadrícula, yendo de arriba a abajo y luego de izquierda a derecha. En otras palabras, el elemento en el índice 0 en la matriz contiene el valor del espacio superior izquierda de la cuadrícula (inicialmente una 2). El elemento en el índice 1 contiene el valor del espacio en la red que se encuentra en la columna izquierda, segundo desde la parte superior, y así sucesivamente. El elemento en el índice H contiene el valor del espacio en la red que se encuentra en la fila superior pero segunda desde la izquierda, y así sucesivamente.

Una vez que el algoritmo termina y el sector vacío se llena por completo con 2s, el mismo algoritmo debe ser suficiente para hacer el mismo proceso de nuevo. El segundo (y en) el tiempo, el camino está todavía extrae de una 2a otra 2, a través de espacios de 0, pero la rejilla es más pequeña porque la 2s que están rodeados por otros 2s no puede ser tocado por el camino (ya que el camino es a lo largo de espacios de 0).

Doy las gracias a quien es capaz de resolver esto para mí, muy mucho. Esto no tiene por qué ser en un determinado lenguaje de programación; de hecho, pseudo-código o simplemente Inglés es suficiente. ¡Gracias de nuevo! Si tienes alguna pregunta, simplemente dejar un comentario y voy a especificar lo que debe ser especificado.

Publicado el 15/05/2010 a las 22:07
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
3

Me parece que un básico relleno de inundación algoritmo sería hacer el trabajo:

  • Escanear su matriz para la primera 0que encuentre, y luego iniciar un relleno de inundación a partir de ahí, llenando la 0región con algún otro número, digamos 3- esto va a etiquetar uno de sus "sectores".
  • Una vez hecho esto, escanear de nuevo por una 0, y Rellenar a partir de ahí, llenando con 4este tiempo.
  • Durante los dos rellenos, puede ser la comprobación de si se puede encontrar su objeto o no; lo que llenar a encontrar que durante un seguimiento de ese número.
  • Después de que ambos rellenos se hacen, comprobar qué región numerada tenía el objeto en ella - Rellenar la región de nuevo, de vuelta con 0este tiempo.
  • Rellenar la otra región numerada con 2, y ya está.

Esto funcionará para cualquier configuración de la red, siempre y cuando no son exactamente dos 0sectores que están desconectados unos de otros; por lo que volver a aplicar el mismo algoritmo de cualquier número de veces que está muy bien.

Editar: Menores de ajustes, para ahorrar una inundación de relleno o dos -

  • Si no encuentra su objeto en la primera inundación de relleno, se puede asumir que el otro sector tiene, por lo que acaba de volver a llenar el número actual con 2y dejar el otro sector sola (puesto que ya está 0-filled).
  • Como alternativa, si lo hace encontrar el objeto en la primera inundación de relleno, puede rellenar directamente el otro sector con 2, y luego volver a llenar el primer sector con 0.
Respondida el 15/05/2010 a las 22:23
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more