Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character
'.'
.
You may assume that there will be only one unique solution.
A sudoku puzzle...
public class Solution { private boolean solveSodukuAtPos(char[][] board, int i, int j){ if(9 == i) return true; if('.' != board[i][j]) return solveSodukuAtPos(board, j == 8? i+1:i, j == 8? 0:j+1); int[] arr = new int[10]; for(int k = 0; k < 9; ++k){ if('.' != board[i][k]){ int v = Character.getNumericValue(board[i][k]); arr[v] = 1; } } for(int k = 0; k < 9; ++k){ if('.' != board[k][j]){ int v = Character.getNumericValue(board[k][j]); arr[v] = 1; } } int x = i / 3 * 3; int y = j / 3 * 3; for(int m = 0; m < 3; ++m) for(int n = 0; n < 3; ++n){ if('.' != board[x+m][y+n]){ int v = Character.getNumericValue(board[x+m][y+n]); arr[v] = 1; } } for(int k = 1; k < 10; ++k){ if(0 == arr[k]){ // Java is not good at parsing, converting .. board[i][j] = Integer.toString(k).charAt(0); if(true == solveSodukuAtPos(board, j == 8? i+1:i, j == 8? 0:j+1) ) return true; } } board[i][j] = '.'; return false; } public void solveSudoku(char[][] board) { solveSodukuAtPos(board, 0, 0); return; } }
No comments:
Post a Comment