Actividad 11: Los Sudokus Parte 3
En la actividad anterior dividimos la funcionalidad de la clase Sudoku en varias clases, cada una con una responsabilidad específica.
En esta actividad no encargaremos de implementar una nueva funcionalidad en la que el sudoku generado cuente con una unica solución. Para ello, se te pide que implementes la siguiente funcionalidad en la clase SudokuValidator:
hasUniqueSolution: Este método se encargará de verificar si el sudoku tiene una única solución. Para ello, se te pide que implementes un algoritmo de backtracking que verifique si el sudoku tiene una única solución. Si el sudoku tiene una única solución, el método debe devolver true, en caso contrario debe devolver false.
countSolutions: Este método se encargará de contar el número de soluciones que tiene el sudoku. Para ello, se te pide que implementes un algoritmo de backtracking que cuente el número de soluciones que tiene el sudoku. Si el sudoku tiene una única solución, el método debe devolver 1, en caso contrario debe devolver el número de soluciones que tiene el sudoku.
Desarrollo
Agrega a la clase
SudokuValidator
los métodoshasUniqueSolution
ycountSolutions
, así como el atributosolutionCount
que se encargará de contar el número de soluciones que tiene el sudoku.Implementa el método
countSolutions
utilizando un algoritmo de backtracking que cuente el número de soluciones que tiene el sudoku.Implementa el método
hasUniqueSolution
utilizando el métodocountSolutions
para verificar si el sudoku tiene una única solución.Agrega a la clase
SudokuGenerator
el métodogenerateOneSolutionPuzzle
que se encargará de generar un sudoku con una única solución. Para ello, se te pide que utilices la claseSudokuPuzzle
y definas un tipo enum para representar el nivel de dificultad del sudoku. El métodogenerateOneSolutionPuzzle
debe recibir como parámetro el nivel de dificultad del sudoku y devolver un objeto de tipoSudokuPuzzle
que contenga el sudoku generado. El métodogenerateOneSolutionPuzzle
debe utilizar el métodogeneratePuzzle
de la claseSudokuGenerator
para generar el sudoku y el métodohasUniqueSolution
de la claseSudokuValidator
para verificar si el sudoku tiene una única solución. Si el sudoku no tiene una única solución, el métodogenerateOneSolutionPuzzle
debe volver a generar el sudoku hasta que tenga una única solución con un límite de intentos de 10. Si el sudoku no tiene una única solución en 10 intentos, el métodogenerateOneSolutionPuzzle
debe devolver null.
La función countSolutions
La función countSolutions
se encargará de contar el número de soluciones que tiene el sudoku. Para ello, se te pide que implementes un algoritmo de backtracking que cuente el número de soluciones que tiene el sudoku. La función countSolutions
debe recibir como parámetro el sudoku y devolver el número de soluciones que tiene el sudoku.
Para ello toma el siguiente pseudocódigo como referencia:
Toma en cuenta que el pseudocódigo anterior es solo una referencia y no es un código Java válido. Debes adaptarlo a Java y a la estructura de tu clase SudokuValidator
. Recuerda que el método countSolutions
debe ser recursivo y debe utilizar el algoritmo de backtracking para contar el número de soluciones que tiene el sudoku. Además, debes implementar el método hasUniqueSolution
utilizando el método countSolutions
para verificar si el sudoku tiene una única solución. Si el sudoku tiene una única solución, el método debe devolver true, en caso contrario debe devolver false.