36/37. Sudoku Solver 数独问题
来源:互联网 发布:科技产品销售网络 编辑:程序博客网 时间:2024/05/16 01:16
36 Valid Sudoku
class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { bool used[9]; for (int i = 0; i < 9; ++i) { fill(used, used + 9, false); for (int j = 0; j < 9; ++j) { if (!check(board[i][j], used)) return false; } fill(used, used + 9, false); for (int j = 0; j < 9; ++j) { if (!check(board[j][i], used)) return false; } } for (int r = 0; r < 3; ++r) { for (int c = 0; c < 3; ++c) { fill(used, used + 9, false); for (int i = r * 3; i < r * 3 + 3; ++i) { // i,j确定小块九宫格的坐标 for (int j = c * 3; j < c * 3 +3; ++j) { if (!check(board[i][j], used)) return false; } } } } return true; } bool check(char ch, bool *used) { // 采用一维数组代替二维数组,优化算法空间 if (ch == '.') return true; if (used[ch - '1']) return false; return used[ch - '1'] = true; }};
37 Sudoku Solver
class Solution {public: void solveSudoku(vector<vector<char>>& board) { if(board.empty() || board.size() != 9 || board[0].size() != 9) return; dfs(board, 0, 0); } bool dfs(vector<vector<char>>& board, int i, int j) { // 深度优先遍历 if(i == 9) return true; if(j == 9) return dfs(board, i+1, 0); // 先写判断函数 if(board[i][j] == '.') { for(int num = 1; num <= 9; ++num) { board[i][j] = (char)('0' + num); if(isValid(board, i, j)) if(dfs(board, i, j+1)) return true; board[i][j] = '.'; // 匹配失败后记得还原到原状态 } } else { return dfs(board, i, j+1); } return false; } bool isValid(vector<vector<char>>& board, int i, int j) { // 检验函数 int row, col; for(col = 0; col < 9; ++col) if(col != j && board[i][col] == board[i][j]) return false; for(row = 0; row < 9; ++row) if(row != i && board[row][j] == board[i][j]) return false; for(row = i/3 *3; row < i/3 * 3 + 3; ++row) { for(col = j/3 * 3; col < j/3 * 3 + 3; ++col) { if((row != i || col != j) && board[row][col] == board[i][j]) return false; } } return true; }};
PS:记住这个dfs模板。
阅读全文
0 0
- 36/37. Sudoku Solver 数独问题
- leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
- [LeetCode] [数独问题] Sudoku Solver
- Sudoku Solver 求解数独问题
- 【LeetCode】37. Sudoku Solver 数独求解
- [LeetCode 36&37] Valid Sudoku & Sudoku Solver (数独问题)
- 数独求解 Sudoku Solver
- Leetcode-Sudoku Solver(数独)
- Sudoku Solver:数独求解
- Leetcode #37. Sudoku Solver 数独求解 结题报告
- LeetCode: Sudoku Solver (数独求解)
- LeetCode Sudoku Solver 数独C++程序
- Sudoku Solver 数独的解决方案
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
- leetcode_Valid Sudoku and Sudoku Solver (数独游戏) _easy
- Sudoku 数独问题(dfs)
- LeetCode-37. Sudoku Solver (JAVA)(数独游戏解集)
- Sudoku Problem Solver (数独游戏解谜器)
- Python中方法的缺省参数问题分析
- TCP 服务器三种模式的简单实现
- JVET-E0021
- 4.5打开动态工具窗口
- Android 屏幕适配方案
- 36/37. Sudoku Solver 数独问题
- Switch Vlan的3种访问模式:Access、Hybrid和Trunk
- iOS Xcode报错:cannot find code object on disk
- 8.19风筝图
- 在ubuntu上安装最新稳定版本的node及npm
- 我的第一个Android things Application
- 运算符汇编解释
- 4.6在工具窗口中添加快捷菜单
- CC264X I2C