37. Sudoku Solver
来源:互联网 发布:淘宝的一元秒杀在哪里 编辑:程序博客网 时间:2024/06/06 20:54
problem:
该问题是数独求解问题,采用方法是深度搜索优先算法。
class Solution {private: bool isOver; //是否已经找到一个正确解。 public: void dfs(vector<vector<char>>& board, int i, int j, int n) { if(j >= n) { dfs(board, i+1, 0, n); } else if(i == n) { this->isOver = true; return; } else if(board[i][j] != '.') { dfs(board, i, j+1, n); } else { for (int k = 1; k <= n; ++k) { board[i][j] = (char)('0' + k); if (isValid(board, i, j, n)){ dfs(board, i, j+1 , n); } if(this->isOver) return; //找到一个解救跳出,防止遍历整个search tree board[i][j] = '.'; } } } bool isValid(vector<vector<char>> &board, int i , int j, int n) { for (int index = 0; index < n; ++index) { if (index != j && board[i][index] == board[i][j]) { return false; } } for (int index = 0; index < n; ++index) { if (index != i && board[index][j] == board[i][j]) { return false; } } int index_i = i / 3; int index_j = j / 3; for (int x = index_i * 3; x < index_i * 3 + 3; ++x) { for (int y = index_j * 3; y < index_j * 3 + 3; ++y) { if ((x!=i || y != j) && board[x][y] == board[i][j]) { //注意这里逻辑是"或"||,不是"与" return false; } } } return true; } void solveSudoku(vector<vector<char>>& board) { if (board.size() == 0 || board[0].size() == 0) return; //简洁的方式去验证输入合法性 this->isOver = false; dfs(board, 0, 0, 9); }};
0 0
- LeetCode --- 37. Sudoku Solver
- LeetCode 37.Sudoku Solver
- [Leetcode] 37. Sudoku Solver
- 37. Sudoku Solver
- 37. Sudoku Solver(Hard)
- [leetcode] 37. Sudoku Solver
- Leetcode 37. Sudoku Solver
- 37. Sudoku Solver
- leetcode 37. Sudoku Solver
- 37. Sudoku Solver
- 37. Sudoku Solver
- LeetCode 37. Sudoku Solver
- 37. Sudoku Solver
- leetcode.37. Sudoku Solver
- LeetCode-37.Sudoku Solver
- leetcode 37. Sudoku Solver
- (Leetcode)37. Sudoku Solver
- 37. Sudoku Solver
- Linux screen命令简单使用方法
- 纯css画一颗跳动的心
- iOS遍历相册中的图片
- ulimit -a
- Oracle表分区
- 37. Sudoku Solver
- C/C++中的联合 union
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- 上传AppStore时图像不能包含 alpha通道和透明度
- zabbix监控mysql数据库参数
- nginx 访问日至 错误日志配置
- iOS NSDate与NSString相互转化
- IOS-OC App本地数据库
- Java内存泄漏与内存溢出