import numpy as np
from itertools import chain
import copy as cp
#骨灰级数独
A=np.array([[8,0,0,0,0,0,0,0,0],
[0,0,3,6,0,0,0,0,0],
[0,7,0,0,9,0,2,0,0],
[0,5,0,0,0,7,0,0,0],
[0,0,0,0,4,5,7,0,0],
[0,0,0,1,0,0,0,3,0],
[0,0,1,0,0,0,0,6,8],
[0,0,8,5,0,0,0,1,0],
[0,9,0,0,0,0,4,0,0]])
#判断函数:判断A矩阵第i行第j列放x是否符合当前条件
def correct(A,x,i,j):
r=3*(i//3)
c=3*(j//3)
if x not in A[i]:
if x not in A.T[j]:
if x not in A[r:r+3,c:c+3]:
return True
#候选集:获取A矩阵第i行第j列可放数字
def calender(A,i,j):
r=3*(i//3)
c=3*(j//3)
l=[1,2,3,4,5,6,7,8,9]
l_exist=list(set(list(chain(*A[r:r+3,c:c+3]))+list(A[i])+list(A.T[j])))
calender=list