leetcode Sudoku Solver
2014-10-22 20:09
573 查看
利用回溯法, 参考/article/4879767.html
代码
代码
class Solution { public: void solveSudoku(vector<vector<char> > &board) { for(int i = 0; i < 9; ++i) for(int j = 0; j < 9; ++j) { if(board[i][j]!='.') fill(i, j, board[i][j]-'0'); } solveSudokuHelper(board, 0); } void fill(int row, int col, int val) { rowValid[row][val] = 1; colValid[col][val] = 1; subBoardValid[row/3*3+col/3][val] = 1; } bool solveSudokuHelper(vector<vector<char> > &board, int index) { if(index>80) return true; int row = index/9; int col = index - 9*row; if(board[row][col]!='.') return solveSudokuHelper(board, index+1); for(int val = '1'; val <= '9'; ++val) { if(isValid(row, col, val-'0')) { board[row][col] = val; fill(row, col, val-'0'); if(solveSudokuHelper(board, index+1)) return true; clear(row, col, val-'0'); board[row][col] = '.'; } } return false; } bool isValid(int row, int col, int val) { if(rowValid[row][val] == 0 && colValid[col][val] == 0 && subBoardValid[row/3*3+col/3][val] == 0) return true; return false; } void clear(int row, int col, int val) { rowValid[row][val] = 0; colValid[col][val] = 0; subBoardValid[row/3*3+col/3][val] = 0; } private: int rowValid[9][10]; int colValid[9][10]; int subBoardValid[9][10]; };
相关文章推荐
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
- [LeetCode] Sudoku Solver
- LeetCode(37) Sudoku Solver
- [LeetCode] Sudoku Solver
- Leetcode Sudoku Solver
- LeetCode | Sudoku Solver
- [leetcode] sudoku solver:暴力还是优化
- leetcode 日经贴,Cpp code -Sudoku Solver
- [leetcode] 37. Sudoku Solver
- LeetCode: 37. Sudoku Solver
- LeetCode :Sudoku Solver
- leetcode 037 —— Sudoku Solver
- Sudoku Solver -- LeetCode
- LEETCODE —— Sudoku Solver
- Leetcode: Sudoku Solver
- Java for LeetCode 037 Sudoku Solver
- leetcode--Sudoku Solver
- [Leetcode] Sudoku Solver (Java)
- leetcode[37]Sudoku Solver
- leetcode 37: Sudoku Solver