Leetcode 37 Sudoku Solver 深搜基础题+位运算
来源:互联网 发布:js修改div背景颜色 编辑:程序博客网 时间:2024/05/01 04:45
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.
强烈推荐的算法入门题,填数独,深搜方法完成,采用的标记方法依然和上一题一样,位操作。http://blog.csdn.net/accepthjp/article/details/52448027
注意回溯
class Solution {public: bool dfs(int dep,vector<vector<char>>& board,int vis[],int vis2[],int vis3[]) { if(dep==81) return true; //全部填完 int x=dep/9,y=dep%9; if(board[x][y]!='.') return dfs(dep+1,board,vis,vis2,vis3); else { for(int i=1;i<10;i++) { if(vis[x]&(1<<i) || vis2[y]&(1<<i) || vis3[x/3*3+y/3]&(1<<i)) continue;//不能填写该数字 vis[x]|=(1<<i); vis2[y]|=(1<<i); vis3[x/3*3+y/3]|=(1<<i); if(dfs(dep+1,board,vis,vis2,vis3)) //可以填写该数字 { board[x][y]='0'+i; return true; } vis[x]&=~(1<<i); vis2[y]&=~(1<<i); vis3[x/3*3+y/3]&=~(1<<i); } } return false; //此位置无数可填 } void solveSudoku(vector<vector<char>>& board) { int vis[9]={0},vis2[9]={0},vis3[9]={0}; for(int i=0;i<9;i++) //预处理已经填好的位置 for(int j=0;j<9;j++) if(board[i][j]!='.') { int t=board[i][j]-'0'; vis[i]|=(1<<t); vis2[j]|=(1<<t); vis3[i/3*3+j/3]=(1<<t); } dfs(0,board,vis,vis2,vis3); }};
1 0
- Leetcode 37 Sudoku Solver 深搜基础题+位运算
- Leetcode 37 Sudoku Solver
- Leetcode 37: Sudoku solver
- [leetcode 37] Sudoku Solver
- LeetCode(37) Sudoku Solver
- leetcode 37:Sudoku Solver
- leetcode 37: Sudoku Solver
- Leetcode #37 Sudoku Solver
- leetcode-37 Sudoku Solver
- leetcode 37:Sudoku Solver
- LeetCode 37: Sudoku Solver
- LeetCode 37 - Sudoku Solver
- LeetCode(37)-Sudoku Solver
- leetcode 37 Sudoku Solver
- LeetCode 37 Sudoku Solver
- LeetCode 37 SudoKu Solver
- LeetCode 37 Sudoku Solver
- leetcode-37-sudoku solver
- SQL大数据量查询的优化
- leetcode 064. Minimum Path Sum
- UE4之Behavior Tree介绍
- Linux学习---shell编程(11-条件判断式)
- leetcode 334 ----字符串翻转
- Leetcode 37 Sudoku Solver 深搜基础题+位运算
- 对于汉诺塔递归的实现和步骤跟踪
- preempt_count
- Linux学习---shell编程(12-if语句)
- 通用的socket地址
- Unity ShaderLab学习总结
- 有向强连通图的Tarjan算法
- Eclipse luna Subversive(SVN) 的安装----note
- Eclipse常用插件