题目原文:
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.
题目大意:
写一个程序求标准数独。
题目分析:
注意是有返回值的dfs(如果有解或者解完了,则向下搜),没什么多说的。注意语言特性,要写C++而不是Java,因为Java是传值调用,那个棋盘传进下一层就不能带出来了。
源码:(language:cpp)
class Solution {
public:
void solveSudoku(vector<vector<char>>& board) {
backtrack(board, 0, 0);
}
bool backtrack(vector<vector<char>>& board, int row, int col){
if(row == 9)
return true;
if(col == 9)
return backtrack(board, row+1, 0);
if(board[row][col] != '.')
return backtrack(board, row, col+1);
for(char i='1'; i<='9'; i++){
if(isValid(board, row, col, i)){
board[row][col] = i;
if(backtrack(board, row, col+1))
return true;
board[row][col] = '.';
}
}
return false;
}
bool isValid(vector<vector<char>>& board, int row, int col, char k){
for(int i=0; i<9; i++){
if(board[i][col] == k)
return false;
if(board[row][i] == k)
return false;
}
for(int i=(row/3)*3; i<(row/3)*3+3; i++){
for(int j=(col/3)*3; j<(col/3)*3+3; j++){
if(board[i][j] == k)
return false;
}
}
return true;
}
};
成绩:
40ms,beats 66.04%,4ms,9.81%