Mientras se programa un generador de Sudoku, ¿cuál es la mejor lógica o algoritmo para verificar que el rompecabezas de Sudoku creado es un verdadero Sudoku?

Este algoritmo (paso a paso) lo guiará hacia la creación de un rompecabezas de Sudoku.

Primera mitad del algoritmo: –

1) comienza con un tablero vacío

2) agregue un número aleatorio en una de las celdas libres (la celda se elige al azar y el número se elige al azar de la lista de números válidos para esta celda de acuerdo con las reglas de SuDoKu)

3) Use el solucionador de retroceso para verificar si la placa actual tiene al menos una solución válida. Si no, deshaga el paso 2 y repita con otro número y celda. Tenga en cuenta que este paso puede producir placas válidas completas por sí solo, pero de ninguna manera son al azar.

4) Repita hasta que el tablero esté completamente lleno de números.

Segunda mitad del algoritmo: –

1) comience con un tablero completo y válido (lleno de 81 números)

2) haga una lista de las 81 posiciones de las celdas y baraje al azar

3) Mientras la lista no esté vacía, tome la siguiente posición de la lista y elimine el número de la celda relacionada

4) pruebe la unicidad utilizando un solucionador rápido (con retroceso si es necesario). Mi solucionador puede contar todas las soluciones, pero se detiene cuando encuentra más de 1 solución.

5) Si el tablero actual tiene solo una solución, vaya al paso 3) y repita.

6) Si el tablero actual tiene más de una solución, deshaga la última eliminación (paso 3) y continúe el paso 3 con la siguiente posición de la lista

7) detente cuando hayas probado las 81 posiciones.

Esto le brinda no solo tableros únicos, sino tableros donde no puede eliminar más números sin destruir la singularidad de la solución.

Bueno, yo hice uno.
Utilicé tres matrices 2d, una para generar el sudoku, una para almacenar la solución y otra para almacenar la llena por el usuario. Luego, usando for loop, verifico si el sudoku se completó correctamente o no.
Si quieres, puedo compartir un poco de mi código contigo.