LeetCode: Sudoku Solver [036]
阿新 • • 發佈:2019-01-25
【題目】
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.
【題意】
解數獨
【思路】
DFS【程式碼】
class Solution { public: bool isValid(vector<vector<char> > &board, int i, int j){ //判斷所在行 for(int col=0; col<9; col++){ if(col!=j && board[i][j]==board[i][col])return false; } //判斷所在列 for(int row=0; row<9; row++){ if(row!=i && board[i][j]==board[row][j])return false; } //判斷所在block int x=i/3*3; int y=j/3*3; for(int row=x; row<x+3; row++){ for(int col=y; col<y+3; col++){ if(row!=i && col!=j && board[i][j]==board[row][col])return false; } } return true; } bool sodoku(vector<vector<char> > &board){ for(int i=0; i<9; i++){ for(int j=0; j<9; j++){ if(board[i][j]=='.'){ for(int value=1; value<=9; value++){ board[i][j]='0'+value; if(isValid(board, i, j)&&sodoku(board))return true; board[i][j]='.'; } return false; } } } return true; } void solveSudoku(vector<vector<char> > &board) { sodoku(board); } };