您的位置:首页 > 其它

[leetcode] Sudoku Solver

2014-09-03 22:59 190 查看
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.

思路:递归,尝试各种可能,参考链接http://blog.csdn.net/doc_sgl/article/details/13005951

代码:

class Solution {
public:
void solveSudoku(vector<vector<char> > &board) {
dfs(board);
}
bool dfs(vector<vector<char> > &board){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]=='.'){
for(int k=1;k<=9;k++){
board[i][j]='0'+k;
if(isValid(board,i,j) && dfs(board))
return true;
board[i][j]='.';
}
return false;
}
}
}
return true;
}
bool isValid(vector<vector<char> > &board,int a,int b){
int i,j;
for(i=0;i<9;i++){
if(i!=a && board[i][b]==board[a][b])
return false;
}
for(j=0;j<9;j++){
if(j!=b && board[a][j]==board[a][b])
return false;
}
int x=a/3*3;
int y=b/3*3;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(x+i!=a && y+j!=b && board[x+i][y+j]==board[a][b])
return false;
}
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法