Hice un algoritmo para generar sudokus, pero fue terriblemente ineficiente. Cada rompecabezas tomó minutos para generar. Así que ahora estoy tratando de escribirlo de nuevo de manera óptima. Pero estoy experimentando algunos problemas con los que necesito ayuda.Algoritmo del generador de sudoku
- Hay dos enfoques, comience con la cuadrícula en blanco y agregue números, luego verifique si se puede resolver. El segundo enfoque es crear una cuadrícula válida con todos los 81 números y luego eliminar hasta que estemos contentos con el número de números restantes y todavía se puede resolver.
Primero utilicé el primer enfoque, pero ahora voy a usar el segundo porque creo que es más efectivo (estamos empezando con un acertijo válido que se puede resolver). Tengo razón en que el segundo enfoque es mejor?
Cuando intento generar una grilla llena llena de dificultades, me encuentro con dificultades. Mi algoritmo es:
- Establezca los candidatos para cada celda. Inicialmente son los números del 1 al 9.
- Elija la celda aleatoria sin valor.
- Seleccione candidato aleatorio de esa celda y asígnelo como valor de celda. Otros candidatos son descartados.
- Ahora para cada fila, celda y la plaza correspondiente a la celda asignada Me quite valor de la celda a partir de estos candidatos, por lo que cada número es único en una fila/columna/cuadrado
- Repita
Este La técnica garantiza una cuadrícula aleatoria sin números duplicados. Sin embargo, la mayoría de las veces, cuando no rompo ninguna regla de colocación, corro el conflicto, como las celdas vacías donde todos los candidatos han sido eliminados, etc. y necesito comenzar de nuevo. ¿Hay alguna manera más elegante/eficiente de llenar toda la cuadrícula con números sin romper las reglas de ubicación y números aleatorios?
Gracias.