36. 有效的数独(遍历一次 9+9+9个字典 哈希) 37. 解数独
发布日期:2025-06-19 07:02:45
浏览次数:4
分类:精选文章
本文共 3055 字,大约阅读时间需要 10 分钟。
有效的数独判断
数独是一种经典的逻辑题目,它的有效性判断主要依赖于每行、每列以及每个3x3的小方块内数字的唯一性。以下是用于判断数独有效性的Python代码:
from typing import Listclass Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: rows = [{} for _ in range(9)] cols = [{} for _ in range(9)] boxes = [{} for _ in range(9)] for i in range(9): for j in range(9): num = board[i][j] if num != '.': num = int(num) box_index = (i // 3) * 3 + (j // 3) rows[i][num] = rows[i].get(num, 0) + 1 cols[j][num] = cols[j].get(num, 0) + 1 boxes[box_index][num] = boxes[box_index].get(num, 0) + 1 if rows[i][num] > 1 or cols[j][num] > 1 or boxes[box_index][num] > 1: return False return True 解数独
解数独可以通过回溯算法来实现。该算法通过尝试填充每个空格,并检查是否违反数独规则来逐步填充整个数独表。以下是解数独的Python代码:
from typing import Listclass Solution: def solveSudoku(self, board: List[List[str]]) -> None: def backtrack(pos): if pos == 81: return True row = pos // 9 col = pos % 9 if board[row][col] != '.': return backtrack(pos + 1) for num in range(1, 10): if self.isValid(board, row, col, num): board[row][col] = str(num) if backtrack(pos + 1): return True board[row][col] = '.' return False def isValid(board, row, col, num): for j in range(9): if board[row][j] == str(num): return False for i in range(9): if board[i][col] == str(num): return False box_row = (row // 3) * 3 box_col = (col // 3) * 3 for i in range(box_row, box_row + 3): for j in range(box_col, box_col + 3): if board[i][j] == str(num): return False return True for i in range(9): for j in range(9): if board[i][j] == '.': backtrack(i * 9 + j)
生成标准数独地图
要生成一张标准数独地图,我们需要确保地图有17个数字提示,并且有唯一解。以下是生成标准数独地图的Python函数:
def generate_standard_sudoku(): initial_board = [ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".","."], [".","9","8",".",".",".",".","6","."], ["8",".",".",".","6",".",".",".","3"], ["4",".",".","8",".","3",".",".","1"], ["7",".",".",".","2",".",".",".","6"], [".","6",".",".",".",".","2","8","."], [".",".",".","4","1","9",".",".","5"], [".",".",".",".","8",".",".","7","9"] ] solver = Solution() solver.solveSudoku(initial_board) print("Standard Sudoku Grid:") for row in initial_board: print(' '.join(row)) 总结
通过以上代码和解释,可以实现数独的有效性判断和解算。有效性判断通过检查每行、每列和每个3x3小方块中的数字唯一性来确定数独的有效性。解算则利用回溯算法,逐步填充空格,确保每一步都符合数独规则。生成标准数独地图则需要结合初始布局和解算算法,确保地图有17个数字提示并且有唯一解。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2026年06月18日 07时03分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pip3命令全解析:Python3包管理工具的详细使用指南
2023-03-02
PIPE 接口信号列表
2023-03-02
pipeline配置与管理Job企业级实战
2023-03-02
pipeline项目配置实战
2023-03-02
Pipenv 与 Conda?
2023-03-02
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
2023-03-02
pipy国内镜像的网址
2023-03-02
quiver绘制python语言
2023-03-02
pip下载缓慢
2023-03-02
PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
2023-03-02
pip在安装模块时提示Read timed out
2023-03-02
pip更换源
2023-03-02
SpringBoot之Banner源码深度分解
2023-03-02
Pix2Pix如何工作?
2023-03-02
QuickBI助你成为分析师——搞定数据源
2023-03-02
pkl来存储python字典
2023-03-02
quick sort | 快速排序 C++ 实现
2023-03-02