您的位置:首页 > 编程语言 > Java开发

Sudoku Solver

2014-06-26 16:21 260 查看

题目

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...



...and its solution numbers marked in red.

方法

典型的回溯法解决数独问题。使用递归来求解。
private boolean isValidSudoku(char[][] board, int row, int col) {
int len = 9;
for (int i = 0; i < len; i++) {
if (i != row) {
if (board[row][col] == board[i][col]) {
return false;
}
}
}
for (int j = 0; j < len; j++) {
if (j != col) {
if (board[row][col] == board[row][j]) {
return false;
}
}
}
int curRowStart = (row / 3) * 3;
int curColStart = (col / 3) * 3;

for (int i = curRowStart; i < curRowStart + 3; i++) {
for (int j = curColStart; j < curColStart + 3; j++) {
if (!(i == row && j == col)) {
if (board[i][j] == board[row][col]) {
return false;
}
}
}
}
return true;
}

private boolean recallSudoku(char[][] board) {
int len = 9;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if (board[i][j] == '.') {

for (int k = 0; k < len; k++) {
board[i][j] = (char)('1' + k);

if (isValidSudoku(board, i, j)) {
if (recallSudoku(board)){
return true;
}
}
board[i][j] = '.';
}
return false;
}
}
}
return true;
}

public void solveSudoku(char[][] board) {
recallSudoku(board);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java LeetCode Sudoku