¿Qué algoritmo debo usar para codificar un solucionador de Sudoku usando la teoría de grafos?

Sudoku se puede resolver utilizando el algoritmo de seguimiento recursivo.

¿Qué es el algoritmo de retroceso?

En los algoritmos de retroceso, intenta construir una solución paso a paso. Si en algún paso queda claro que la ruta actual en la que se encuentra no puede conducir a una solución, regrese al paso anterior (retroceso) y elija una ruta diferente. Brevemente, una vez que agota todas sus opciones en un cierto paso, retrocede.

Piensa en un laberinto o un laberinto: ¿cómo encuentras el camino desde una entrada hasta una salida? Una vez que llegue a un callejón sin salida, debe retroceder. ¿Pero retroceder a dónde? al punto de elección anterior. El retroceso también se conoce como búsqueda en profundidad .

Enfoque para resolver el sudoku usando el algoritmo de retroceso recursivo

  1. Como todos los demás problemas de Backtracking, podemos resolver Sudoku uno por uno asignando números a celdas vacías.
  2. Antes de asignar un número, debemos confirmar que el mismo número no está presente en la fila actual, la columna actual y la subcuadrícula 3X3 actual.
  3. Si el número no está presente en la fila, columna o subcuadrícula respectiva, podemos asignar el número y verificar de forma recursiva si esta asignación conduce a una solución o no.
  4. Si la asignación no conduce a una solución, entonces intentamos el siguiente número para la celda vacía actual. Y si ninguno de los números (1 a 9) conduce a la solución, devolvemos falso y volvemos a la celda anterior e intentamos el siguiente número posible allí.

Referencia:

Solucionador de Sudoku usando Backtracking Recursivo | Code Pumpkin: contiene una explicación clara y la implementación del programa Java. Vale la pena leer..!!

Enlaces de baile. Hermoso algoritmo ¡Busca en Google y diviértete!

More Interesting

¿Cuál es el algoritmo más optimizado para encontrar la suma de la diferencia absoluta de cada par distinto en una matriz entera?

Ayúdame con el problema TopCoder SRM - 599, div - I, level - 3?

¿Por qué el problema de detención se considera no solucionable mientras manipulamos / negamos la respuesta nosotros mismos con la máquina N al final de la máquina X?

¿Qué bibliotecas o marcos de Python, C son buenos para las pruebas de diagnóstico en estadísticas?

Teoría de conjuntos: ¿un subconjunto es un tipo de intersección?

¿En qué se diferencia la programación dinámica del seguimiento hacia atrás?

¿Cuál es el mejor algoritmo / software de compresión hasta ahora? ¿Cómo funciona (vista simple y abstracta) y qué se puede mejorar?

¿Cuáles son los mejores algoritmos de partición de gráficos para gráficos grandes?

Cómo obtener maestría en estructuras de datos y algoritmos

¿Qué es una explicación intuitiva de la complejidad del tiempo de ejecución del algoritmo?

¿Cuáles son algunos de los algoritmos comunes y estrategias de diseño utilizados por los desarrolladores de juegos sin fin?

¿Hay algún recurso donde pueda practicar problemas de programación dinámica según sus tipos?

¿Cómo se calculan los tiempos de conducción de Google Maps?

¿Qué es un algoritmo para el reemplazo de página (memoria virtual) LRU y FIFO?

En los concursos de programación, ¿puedo adivinar la complejidad temporal de la solución (digamos n, n ^ 2, log n) para el problema, dado el límite de tiempo para el problema?