判断数独是否合法,可以使用Python的代码实现。下面是Python如何判断数独是否合法的完整攻略。
步骤一:读取数独矩阵
首先,需要读取数独矩阵,将其转换为一个9x9的二维数组。可以使用Python的input()
函数或者从文件中读取的方式进行读取。另外,为了方便判断,数独中未填写的格子使用0表示。
示例代码:
# 读取数独矩阵
matrix = []
for i in range(9):
line = input().strip()
row = [int(x) for x in line.split()]
matrix.append(row)
步骤二:判断每行、每列、每个九宫格是否合法
接下来,需要对数独进行检查,判断每行、每列、每个九宫格是否合法。具体思路是依次检查每行、每列、每个九宫格,检查每个数字在这一行、一列、一个九宫格中是否重复出现。如果重复出现,则说明数独不合法。
示例代码:
# 判断每行是否合法
def isValidRow(matrix, row):
nums = set()
for i in range(9):
num = matrix[row][i]
if num == 0:
continue
if num in nums:
return False
nums.add(num)
return True
# 判断每列是否合法
def isValidCol(matrix, col):
nums = set()
for i in range(9):
num = matrix[i][col]
if num == 0:
continue
if num in nums:
return False
nums.add(num)
return True
# 判断每个九宫格是否合法
def isValidBox(matrix, row, col):
nums = set()
x = row // 3 * 3
y = col // 3 * 3
for i in range(x, x+3):
for j in range(y, y+3):
num = matrix[i][j]
if num == 0:
continue
if num in nums:
return False
nums.add(num)
return True
步骤三:检查整个数独是否合法
最后,需要依次检查每行、每列、每个九宫格是否合法。如果有任何一行、一列、一个九宫格不合法,则说明数独不合法。如果所有行、列、九宫格都合法,则说明数独合法。
示例代码:
# 检查整个数独是否合法
def isValidSudoku(matrix):
for i in range(9):
if not isValidRow(matrix, i):
return False
if not isValidCol(matrix, i):
return False
for j in range(3):
if not isValidBox(matrix, i, j*3):
return False
return True
这样,就可以使用以上代码,来判断一个数独是否合法了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python如何判断数独是否合法 - Python技术站