leetcode Sudoku Solver
来源:互联网 发布:apache tools 编辑:程序博客网 时间:2024/06/07 05:59
class Solution {public: int flip(int i){ int ret = 1 << i; ret = ~ret; return ret; } bool valid(int v, int x, int y, vector<int>&row, vector<int>&column, vector<int>&square){ int rowmark = row[x] & (1 << v); int columnmark = column[y] & (1 << v); int id1 = x / 3, id2 = y / 3; int sid = id1 * 3 + id2; int squaremark = square[sid] & (1 << v); return rowmark == 0 && columnmark == 0 && squaremark == 0; } bool dfs(int x, int y, vector<int>&row, vector<int>&column, vector<int>&square, vector<vector<char> >&board){ bool tmp = false; if(board[x][y] != '.'){ if(y == 8){ if(x == 8){ return true; } else{ tmp = dfs(x + 1, 0, row, column, square, board); } } else{ tmp = dfs(x, y + 1, row, column, square, board); } return tmp; } for(int i = 1; i <= 9; ++i){ if(valid(i, x, y, row, column, square)){ row[x] |= (1 << i); column[y] |= (1 << i); int id1 = x / 3, id2 = y / 3; int sid = id1 * 3 + id2; square[sid] |= (1 << i); board[x][y] = i + '0'; if(y == 8){ if(x == 8){ return true; } else{ tmp = dfs(x + 1, 0, row, column, square, board); } } else{ tmp = dfs(x, y + 1, row, column, square, board); } if(!tmp){ row[x] &= flip(i); column[y] &= flip(i); square[sid] &= flip(i); board[x][y] = '.'; } if(tmp){ return true; } } } return false; } void solveSudoku(vector<vector<char> > &board) { vector<int> row, column, square; row.resize(9, 0); column.resize(9, 0); square.resize(9, 0); for(int i = 0; i < 9; ++i){ for(int j = 0; j < 9; ++j){ int id1 = i / 3, id2 = j / 3; int sid = id1 * 3 + id2; switch(board[i][j]){ case('.'): break; default: int v = board[i][j] - '0'; row[i] |= (1 << v); column[j] |= (1 << v); square[sid] |= (1 << v); break; } } } dfs(0, 0, row, column, square, board); }};
0 0
- 【LeetCode】Valid Sudoku && Sudoku Solver
- [Leetcode]Sudoku Solver&&Valid Sudoku
- leetcode Valid Sudoku & Sudoku Solver
- Leetcode 37 Sudoku Solver
- [Leetcode] Sudoku Solver
- Leetcode 37: Sudoku solver
- LeetCode Sudoku Solver
- [LeetCode]Sudoku Solver
- Leetcode Sudoku Solver
- LeetCode-Sudoku Solver
- LeetCode - Sudoku Solver
- LeetCode:Sudoku Solver
- 【leetcode】Sudoku Solver
- Leetcode: Sudoku Solver
- leetcode Sudoku Solver
- LeetCode | Sudoku Solver
- LeetCode Sudoku Solver
- [Leetcode] Sudoku Solver (Java)
- 网络学习的网址
- c的多维数组动态建立的问题
- JVM 配置参数学习与研究
- python34之殇——DJango连接Mysql数据库
- 嵌入式软件开发培训笔记——C高级 数据结构与算法基础
- leetcode Sudoku Solver
- HDU2200 Eddy's AC难题 【组合】
- 第六周 项目5 友元类
- Javassist学习总结
- 持续集成搭建心得
- Python GUI 04----Entry
- HDU4870:Rating(DP)
- startService与bindService
- JVM调优总结:分代垃圾回收详述