37. Sudoku Solver
来源:互联网 发布:java个人简历自我评价 编辑:程序博客网 时间:2024/04/29 20:39
//回溯法解//注意递归终止条件,一个是递归到点(8,8)而且该点为数字,另一个是递归到该点,该点处为‘.’,而且可以放置数字。//cout<<bitset<sizeof(int)*8>(r[i][j])<<" "; 二进制输出class Solution {public: void find_result(int r[3][9],vector<vector<char>>& b,int x,int y,bool & flag) { if(x==9) return; for(int i=x;i<9;i++) { for(int j=(i==x?y:0);j<9;j++) { if(b[i][j]=='.') { for(int k=0;k<9;k++) { if(r[0][i]&(1<<k)||r[1][j]&(1<<k)||r[2][i/3*3+j/3]&(1<<k)) continue; if(i==8&&j==8) flag=true; b[i][j]='1'+k; r[0][i]|=(1<<k); r[1][j]|=(1<<k); r[2][i/3*3+j/3]|=(1<<k); find_result(r,b,i,j+1,flag); if(flag) return; r[0][i]&=~(1<<k); r[1][j]&=~(1<<k); r[2][i/3*3+j/3]&=~(1<<k); } b[i][j]='.'; return; } else if(i==8&&j==8) flag=true; if(flag) return; } } } void solveSudoku(vector<vector<char>>& b) { int r[3][9]={0}; for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(b[i][j]!='.') { int k=b[i][j]-'1'; r[0][i]|=(1<<k); r[1][j]|=(1<<k); r[2][i/3*3+j/3]|=(1<<k); } } } bool falg=false; find_result(r,b,0,0,falg); }};
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
- MySql为何默认不用hash索引而用BTree索引的几点原因
- centos6.7 修改最大打开进程数和文件数
- H5知识点大总结勾起你的欲望
- 面试题--多线程
- 状态机
- 37. Sudoku Solver
- Qt中如何获取当前控件类型
- 经典Sql语句
- 忽略编译警告
- 利用正则表达式排除特定字符串
- colors
- oracle 删除步骤
- 欢迎使用CSDN-markdown编辑器
- 云服务与传统服务器的区别