回溯算法可视化解数独
解数独
terminal 内执行可以看到过程
内置判断数独是否有效的方法
内置了两个待解决的数独,答案是一样的
- 快速方法,内置数独缺失的比较少,返回较快
python3 script.py quick
- 正常运行
python3 script.py
import sys
import time
def is_valid_sudoku(board) -> bool:
"""判断是否有效只需要判断是否重复即可,set方法高效,只要去重后的长度和之前的长度相同,说明无重复"""
# 行数否重复
for row in range(9):
_row = [i for i in board[row] if i != "."]
if len(set(_row)) != len(_row):
return False
# 列是否重复
for col in range(9):
_col = [board[row][col] for row in range(9) if board[row][col] != "."]
if len(set(_col)) != len(_col):
return False
# 九宫格
for i in [3, 6, 9]:
for j in [3, 6, 9]:
res = []
cols = list(range(j - 3, j))
for row in range(i - 3, i):
res.extend([board[row][col] for col in cols if board[row][col] != "."])
if len(set(res)) != len(res):
return False
return True
def solve_sudoku(board):
"""board: [[]] 9*9"""
# 是否有效
if not is_valid_sudoku(board):
print("invalid sudoku")
exit(