[Leetcode] Sudoku Solver
2013-03-02 02:57
309 查看
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.
回溯!
我的代码有一个弊病,每次回溯都从 board[0][0] 开始搜,浪费时间。解决方案是设计一个position struct (包含x,y坐标),将所有的 empty position 放入一个 vector,再一个一个处理。(类似 DFS 的说)但是,我还是太懒了,唔~
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.
回溯!
我的代码有一个弊病,每次回溯都从 board[0][0] 开始搜,浪费时间。解决方案是设计一个position struct (包含x,y坐标),将所有的 empty position 放入一个 vector,再一个一个处理。(类似 DFS 的说)但是,我还是太懒了,唔~
class Solution { public: void solveSudoku(vector<vector<char> > &board) { solveThisSudoku(board); } bool solveThisSudoku(vector<vector<char> > &board) { // Start typing your C/C++ solution below // DO NOT write int main() function bool forward = false; for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(board[i][j]=='.') { for(int val=1;val<=9;val++) { board[i][j] = '0' + val; if( checkSudoku(board,i,j) && solveThisSudoku(board)== true ) { return true; } board[i][j] = '.'; } return false; } } } return true; } bool checkSudoku(vector<vector<char> >& board, int x, int y) { bool flags[9] = {0}; for(int i = 0; i < 9; ++i) if(board[x][i] >= '1' && board[x][i] <= '9') { if(!flags[board[x][i] - '1']) flags[board[x][i] - '1'] = true; else return false; } memset(flags, 0, 9); for(int i = 0; i < 9; ++i) if(board[i][y] >= '1' && board[i][y] <= '9') { if(!flags[board[i][y] - '1']) flags[board[i][y] - '1'] = true; else return false; } int xx = x/3*3; int yy = y/3*3; memset(flags, 0, 9); for(int i = 0; i < 3; ++i) for(int j = 0; j < 3; ++j) if(board[xx+i][yy+j] >= '1' && board[xx+i][yy+j] <= '9') { if(!flags[board[xx+i][yy+j]-'1']) flags[board[xx+i][yy+j]-'1'] = true; else return false; } return true; } };
相关文章推荐
- leetcode[37]Sudoku Solver
- 【LeetCode】37. Sudoku Solver
- 算法分析与设计课程(8):【leetcode】Sudoku Solver
- LeetCode 37 Sudoku Solver
- 【leetcode刷题笔记】Sudoku Solver
- LeetCode 37 Sudoku Solver(求解数独)
- leetcode 36. Valid Sudoku 37. Sudoku Solver
- leetcode - Sudoku Solver
- [LeetCode 37] Sudoku Solver回溯解法
- Leetcode 37. Sudoku Solver
- Leetcode 笔记 36 - Sudoku Solver
- 【leetcode】Sudoku Solver
- leetcode--37--Sudoku Solver
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
- LeetCode_37 Sudoku Solver
- LeetCode 36 Sudoku Solver
- LeetCode37 Sudoku Solver
- leetcode: 37. Sudoku Solver
- LeetCode 37 - Sudoku Solver
- [Leetcode]Sudoku Solver