您的位置:首页 > 其它

LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)

2014-06-29 09:38 477 查看
转自出处:/article/4879767.html
Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be partially filled, where empty cells are filled with the character
'.'
.A partially filled sudoku which is valid.Note:A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.注意到题目中说的,只要当前已经填充的数字是合法的就可以,不一定要这个数独是有解.(下面说的九宫格都是指3*3的网格)因此只需要判断9*9网格的每一行、每一列、9个小九宫格是否合法。即如果在每一行、每一列、每个9个小九宫格内,某个数字重复出现了,当前数独就是不合法的。 本文地址网上很多解法是:行、列、九宫格、分三个两重循环来分别判断是否合法。其实只需要一个两重循环即可需要注意的是:如果把九宫格按照行从0开始标号,那么数字board[i][j] 位于第 i/3*3+j/3 个九宫格内
针对上面的算法,还可以优化空间。上面的算法中,在双重循环时,我们默认了第一重循环表示矩阵的行、第二重循环表示矩阵的列。可以换一种思路:在检测行是否合法时,i 表示矩阵的行,j 表示矩阵的列;检测列是否合法时,i 表示矩阵的列,j 表示矩阵的行;检测九宫格是否合法时,i 表示九宫格的标号,j 表示九宫格里的每个元素(只是我们需要根据i、j定位相应的元素到原来的矩阵:第 i 个九宫格里面的第 j 个元素在原矩阵的第 3*(i/3) + j/3 行,第 3*(i%3) + j%3)列,“/” 表示整数除法)
以上的基础上,当然我们还可以用bitmap来更加压缩空间
Sudoku Solver
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.这种类型的游戏一般回溯法来解决,设置某个空格时,如果该空格无论设置什么数字都无法达到合法状态,那么回溯重新设置上一个空格,详细见代码注释
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: