Aquí es una buena para reflexionar sobre: Resolver rompecabezas de Kakuro
http://en.wikipedia.org/wiki/Kakuro
Estoy intentando hacer un programa de solución para este juego. El papeleo está hecho (leyendo un archivo inicial con un número variable de columnas y filas. Se supone que el archivo de entrada sigue las reglas del juego para que el juego siempre se pueda resolver. Tómate tu tiempo para leer las reglas del juego.
I 've cuidado de la estructura de datos que creo que se adapte mejor:
struct aSquare { int verticalSum; int horizontalSum; int value; }
e hizo una 'matriz' de éstos de forma dinámica para trabajar en lo hice para que los cuadrados negros tienen un valor de -1 y. los cuadrados blancos (los cuadrados de la solución real) se inicializan a 0. También puede obtener la posición de cada estructura aSquare desde el conjunto fácilmente, sin necesidad de crear campos de estructura adicionales para él.
Ahora el algoritmo ... Cómo en el mundo voy a conciliar todas estas sumas y encontrar una manera general que resolverá todos los tipos de grillas. He estado luchando con esto toda la tarde en vano.
Se aprecia la ayuda, ¡diviértase!
* EDIT: Me acabo de dar cuenta de que el enlace real que publiqué tiene algunos consejos con respecto a las técnicas de resolución. Todavía voy a mantener esto para ver qué se le ocurre a la gente.
Tenga en cuenta que hay mucho espacio para la astucia en el paso "[calcular posibles valores legales para ese campo]". – Brian
@Brian: más para elegir una posición, como en muchos algoritmos esto podría significar pasar de un tiempo polinomial a uno exponencial. Kakoru es NP-completo, pero aún elegir el orden sabiamente podría hacer las constantes mucho más pequeñas. Y calcular los posibles valores legales debe ser un tiempo constante con estructuras de datos adecuadas, de todos modos. – liori
Bastante justo.En un solucionador que diseñé (para un rompecabezas diferente), un truco que utilicé fue escoger ** cada ** posición y probarlo para una iteración, usando pruebas por contradicción para reducir la cantidad de posibles valores legales. También completé todos los espacios que tenían solo un posible valor legal. Por lo tanto, mi rompecabezas tenía una función de facto '[calcular posibles valores legales para cada campo]'. Mi selector de posición para hacer conjeturas no tenía inteligencia en absoluto, y realmente no la necesitaba. Para ser justos, Nurikabe es un rompecabezas binario, por lo que todas las posiciones están igualmente restringidas. – Brian