Sudoku Solver:数独求解
2017-12-24 16:35
357 查看
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.
思路:这道题是在验证数独验证数独点击打开链接的基础上,求出答案。方法是采用回溯法穷举所有可能。
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.
思路:这道题是在验证数独验证数独点击打开链接的基础上,求出答案。方法是采用回溯法穷举所有可能。
class Solution { public boolean valid(char[][] board) { for (int i = 0; i < 9; i++) { HashSet row = new HashSet<>(); HashSet col = new HashSet<>(); HashSet cube = new HashSet<>(); for (int j = 0; j < 9; j++) { if (board[i][j] != '.' && !row.add(board[i][j])) return false; if (board[j][i] != '.' && !col.add(board[j][i])) return false; if (board[i / 3 * 3 + j / 3][i % 3 * 3 + j % 3] != '.' && !cube.add(board[i / 3 * 3 + j / 3][i % 3 * 3 + j % 3])) return false; } } return true; } public boolean solve(char[][] board) { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (board[i][j] == '.') { for (char x = '1'; x <= '9'; x++) { board[i][j] = x; if (!valid(board)) { board[i][j] = '.';//注意此处要恢复成原样,因为当x=='9'时假设被continue,之后false后虽然返回,但是board却被修改成不正确的样子 continue; } if (solve(board)) { return true; } else { board[i][j] = '.'; } } return false;//注意此处极容易出错!!!当所有尝试都已经试过时,证明此路不通,需要返回FALSE以便回溯。 } } } return true; } public void solveSudoku(char[][] board) { if (board.length <= 0) return; solve(board); } }前两天还看到朋友圈有人在玩数独,还再思考怎么求解,原来是试出来的,看来人类也不聪明啊...
相关文章推荐
- [LeetCode] Sudoku Solver 求解数独
- LeetCode 37 Sudoku Solver(求解数独)
- LeetCode 37 Sudoku Solver(求解数独)(*)
- [Leetcode] sudoku solver 求解数独
- Leet Code 37 Sudoku Solver - 求解数独 - Java
- 数独求解 Sudoku Solver
- [LeetCode] Sudoku Solver 解数独,递归,回溯
- 2017BUAA软工个人项目之数独生成与求解
- 求解数独
- 关于如何求解数独问题
- 一段代码,求解数独(九宫格)游戏
- C语言求解数独
- 数独的求解算法 回溯
- JavaScript遍历求解数独问题的主要思路小结
- Leetcode-Sudoku Solver(数独)
- [LeetCode] [数独问题] Sudoku Solver
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
- 数独求解程序
- 数独游戏求解:解法适用于任意阶数的数独
- c语言编写求解数独