Sudoku Solver
Posted RenewDo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sudoku Solver相关的知识,希望对你有一定的参考价值。
思路:对空处依次填充1-9,然后判断是否合法。如果不合法就再回溯。
注意:判断合法性时,可以不用判断全部,直接判断对应的行,列,九小格。
对与九小格的 判断:可以用对应的3行和对应的3列唯一确定。
class Solution { public: bool check(vector<vector<char>>& board,int x,int y) { int row,col; for(row=0;row<9;row++ ) if(row!=x && board[row][y]==board[x][y]) return false; for(col=0;col<9;col++ ) if(col!=y &&board[x][col]==board[x][y]) return false; for(row=x/3*3;row<(x/3+1)*3;row++ ) for(col=y/3*3;col<(y/3+1)*3;col++ ) if(x!=row&&y!=col && board[x][y]==board[row][col]) return false; return true; } bool inter(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(check(board,i,j)) if(inter(board)) return true; board[i][j]=‘.‘; } return false; } } return true; } void solveSudoku(vector<vector<char>>& board) { inter(board); } };
以上是关于Sudoku Solver的主要内容,如果未能解决你的问题,请参考以下文章