LeetCode--Sudoku Solver(DFS)
2015-04-01 11:39
225 查看
题意:求解9*9数独。
题解:典型的DFS,使用三个hash数组来判断行,列以及方块的取值情况,根据深搜不断更新数组。
代码如下:
题解:典型的DFS,使用三个hash数组来判断行,列以及方块的取值情况,根据深搜不断更新数组。
代码如下:
class Solution { public: int solve(vector<vector<char> >& board,int r,int c){ if(r == 8&&c == 9) //数独完成 return 1; if(c == 9){ //进入下一行 return solve(board,r+1,0); } if(board[r][c] != '.'){ return solve(board,r,c+1); } int tmp = r-r%3+c/3; //方块的序列号 for(int i = 1;i <= 9;i++){ if(row[r][i]||col[c][i]||squ[tmp][i]) continue; board[r][c] = i+'0'; row[r][i] = col[c][i] = squ[tmp][i] = 1; if(solve(board,r,c+1)){ return 1; } row[r][i] = col[c][i] = squ[tmp][i] = 0; } board[r][c] = '.'; return 0; } int initHash(vector<vector<char> > &board){ for(int i = 0;i < 9;i ++){ for(int j = 0;j < 9;j++){ if(board[i][j] == '.') continue; int tmp = board[i][j]-'0'; row[i][tmp] = 1; col[j][tmp] = 1; squ[i-i%3+j/3][tmp] = 1; } } return 0; } void solveSudoku(vector<vector<char> > &board) { vector<vector<bool> >(9,vector<bool>(10,0)).swap(row); vector<vector<bool> >(9,vector<bool>(10,0)).swap(col); vector<vector<bool> >(9,vector<bool>(10,0)).swap(squ); initHash(board); solve(board,0,0); } private: vector<vector<bool> > row; vector<vector<bool> > col; vector<vector<bool> > squ; };
相关文章推荐
- Sudoku Solver 破解数独 @LeetCode 附DFS感想
- leetcode 671. Second Minimum Node In a Binary Tree 第二小数字 + 深度优先遍历DFS
- leetcode 652. Find Duplicate Subtrees Map记录查询 + 深度优先遍历DFS
- 【Leetcode】【python】Sudoku Solver
- LeetCode--Combination Sum(DFS)
- leetcode 124. Binary Tree Maximum Path Sum 最大路径和 + DFS深度优先搜索
- leetcode 139. Word Break 深度优先遍历DFS按照index递归搜索 + 很棒的动态规划DP做法
- LeetCode-51-N-Queens 八皇后问题dfs
- 2017.11.5 LeetCode - 104. Maximum Depth of Binary Tree 【dfs的应用】
- 【LeetCode】111. Minimum Depth of Binary Tree解法及注释,Java,C++,DFS
- LeetCode—*Combination Sum II(DFS算法C数组中有重复值)
- leetcode:Sum Root to Leaf Numbers (二叉树的DFS)
- leetcode-Sudoku Solver
- leetcode 236. Lowest Common Ancestor of a Binary Tree 最近公告祖先LCA + 二叉树 + 深度优先遍历DFS
- leetcode 257. Binary Tree Paths 深度优先遍历DFS
- LeetCode - Sudoku Solver
- LeetCode-----37. Sudoku Solver(解数读)
- leetcode -- Remove Invalid Parentheses--又是DFS,BFS的题目
- leetcode 102 Binary Tree Level Order Traversal(DFS||BFS)
- leetcode dfs Validate Binary Search Tree