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 { public void solveSudoku(char[][] board) { dfs(board, 0, 0); } private boolean valid(char[][] board, char key, int x, int y) { int m = board.length; int n = board[0].length; for(int i = 0; i < m; i++) { if(board[i][y] == key) return false; } for(int i = 0; i < n; i++) { if(board[x][i] == key) return false; } for(int i = (x/3)*3; i < (x/3+1)*3; i++) { for(int j = (y/3)*3; j < (y/3+1)*3; j++) { if(board[i][j] == key) return false; } } return true; } private boolean dfs(char[][] board, int x, int y) { int m = board.length; int n = board[0].length; if(x == m) return true; if(y == n) return dfs(board, x+1, 0); if(board[x][y] != '.') return dfs(board, x, y+1); for(char i = '1'; i <= '9'; i++) { if(valid(board, i, x, y)) { board[x][y] = i; if(dfs(board, x, y+1)) return true; board[x][y] = '.'; // important here, remember to set the status back } } return false; } }
没有评论:
发表评论