Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Sudoku {
- static void solveSudoku(int[][] sudoku){
- int row, column;
- // If there is no unassigned location, we are done
- if (FreeLocation(sudoku, row, column))
- return true;
- for (int number = 1; number <= sudoku.length; number++)
- {
- if (CheckIfRepeated(sudoku, row, column, number))
- {
- sudoku[row][column] = number;
- if (solveSudoku(sudoku))
- return true;
- /*backtrack*/
- sudoku[row][column] = 0;
- }
- }
- return false;
- }
- private static bool FreeLocation(int[][] sudoku) {
- for (int row = 0; row < sudoku.length; row++) // 9
- for (int column = 0; column < sudoku.length; column++) // 9
- if (sudoku[row][column] == 0)
- return true;
- return false;
- }
- /* for the next 3 functions, "false" means that the value was found, and "true" means the opposite.
- I did it so for a better use of the "if" statement: if the three are true,
- then it's safe to use the value of "number" in CheckIfRepeated*/
- private static bool IsNumberRepeatedInRow(int[][] sudoku, int row, int column, int number) {
- for (column = 0; column < sudoku.length ; column++)
- if (sudoku[row][column] == number)
- return false;
- return true;
- }
- private static bool IsNumberRepeatedInColumn(int[][] sudoku, int row, int column, int number) {
- for (row = 0; row < sudoku.length ; row++)
- if (sudoku[row][column] == number)
- return false;
- return true;
- }
- private static bool IsNumberRepeatedInSquare(int[][] sudoku, int row, int column, int number){
- for (int rowh = row - row%3 ; rowh < row+3 ; rowh++) {
- for(int colh = column - column%3 ; colh < column+3 ; colh++) {
- if (sudoku[rowh][colh] == number)
- return false;
- return true;
- }
- }
- }
- private static bool CheckIfRepeated(int[][] sudoku, int row, int column, int number) {
- if (IsNumberRepeatedInRow(sudoku, row, column, number) &&
- IsNumberRepeatedInColumn(sudoku, row, column, number) &&
- IsNumberRepeatedInSquare(sudoku, row, column, number));
- return true;
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement