¿Encontrar el número máximo de reinas que puedes colocar en un tablero de ajedrez modificado con paredes negras? Por favor, discuta el enfoque del algoritmo, la implementación y la complejidad en detalles.

La mejor solución es 15.

Con solo 64 celdas, este problema puede resolverse fácilmente mediante la fuerza bruta. Una buena opción de implementación es utilizar el rastreo inverso: podremos podar grandes partes del espacio de búsqueda de manera eficiente.

Aquí hay un truco para simplificar la implementación: multiplique todas las coordenadas de celda por 2 y represente las paredes en un mapa de bits simple de la siguiente manera:

char board[17][18] = { "#################", "#?.?.?.?.?.?#?.?#", "#...........#...#", "#?.?.?.?#?.?#?.?#", "######..#.......#", "#?.?.?.?#?.?.?.?#", "#......#####....#", "#?.?.?.?.?#?.?.?#", "#.........#.....#", "#?.?#?.?.?#?.?.?#", "#...#.....#######", "#?.?#?.?.?.?.?.?#", "#...######......#", "#?.?.?.?.?.?#?.?#", "###.........#...#", "#?#?.?.?.?.?#?.?#", "#################", }; 

Los signos de interrogación son las celdas. Tenga en cuenta que dos signos de interrogación se ven (horizontal, vertical o diagonalmente) si y solo si las dos celdas correspondientes se ven en la imagen en los detalles de la pregunta. (Permito pasar a través de un punto donde termina una sola pared, pero no a través de una esquina donde se unen dos o más paredes).

Y aquí hay una solución con 15 reinas:

  #################
 #Q .......... # Q .. #
 # ........... # ... #
 # .... Q .. # Q .. # ... #
 ###### .. # ....... #
 #Q ...... # ...... Q #
 # ...... ##### .... #
 # .... Q .... # Q .... #
 # ......... # ..... #
 # ... # .... Q # ..... #
 # ... # ..... #######
 # .. Q # ...... Q .... #
 # ... ###### ...... #
 # .... Q ...... # .. Q #
 ### ......... # ... #
 #Q # ...... Q .. # ... #
 #################

Gracias por A2A.

Bueno, sus necesidades deben ser un algoritmo para esto. No entiendo cómo iniciarlo, ya que la posición de los bloques no tiene lógica, me rasqué la cabeza pero no sé por dónde empezar. Pero la respuesta debería ser 13. Lo descubrí poniendo reinas siempre que sea posible.

Pero estoy tratando de que un algoritmo para obtener la respuesta lógica exacta se actualice pronto si obtengo algo en él.

Esta es realmente una pregunta difícil, puede usar el método hit n trial, ya que sería más beneficioso en este caso.

More Interesting

¿Hay un libro sobre estructuras de datos PHP y algoritmos?

¿Cómo inserta este código un nuevo nodo en un árbol binario?

¿Las IA modernas sufren los mismos problemas que los algoritmos, o tienen un conjunto diferente de problemas?

¿Un cerebro humano tiene un algoritmo? Si se descifran los algoritmos del cerebro humano, ¿qué sucede? ¿Se usa en inteligencia artificial?

Cómo mejorar si he pasado 10 años aprendiendo programación pero aún no puedo resolver la mayoría de los problemas de algoritmos

¿Por qué no hablamos de O grande para algoritmos de aprendizaje automático?

¿Cuál es la diferencia entre Segment Tree y Fenwick Tree en términos de operaciones?

¿Cuál es su estructura de datos favorita y por qué?

Cómo aprender 'algoritmos' sobre los que el mundo tecnológico está hablando y aplicarlos a mi vida cotidiana

¿Qué es un algoritmo de descubrimiento de ruta de ataque cibernético?

Soy nuevo en Quora y no entiendo si las preguntas de coeficiente intelectual son una tendencia constante o si estoy atrapado en alguna forma de algoritmo infernal. Si es así, ¿cómo escapo?

¿Por qué se garantiza que la liebre y la tortuga se encontrarán en el algoritmo de detección de ciclos de Floyd?

¿Cuáles son los beneficios del ordenamiento dinámico y sus desventajas en comparación con otros algoritmos de ordenamiento?

¿Cuál es el algoritmo de la suma de los primeros 20 números naturales?

¿Qué debe saber todo programador sobre tablas hash y funciones hash?