1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| def my_dfs(A): result=[] ALL_SET=set({1,2,3,4,5,6,7,8,9,0}) for i in range(9): for j in range(9): if A[i][j]==0: d={} set_x=set(A[i][k] for k in range(9)) set_y=set(A[k][j] for k in range(9)) set_x_y=set_x|set_y data=list(ALL_SET-set_x_y) d['%s,%s'%(str(i),str(j))]=data result.append(d) return result
def check(A): flag=False for i in range(9): for j in range(9): if A[i][j] is 0: flag=True return flag def start(A): count=1 while check(A): data=my_dfs(A) for each in data: for index,item in each.items(): if len(item)==1: i,j=index.split(',') A[int(i)][int(j)]=item[0] count+=1 return A if __name__=='__main__': A = [ [0, 8, 9, 0, 1, 6, 0, 2, 0], [8, 0, 3, 0, 4, 0, 7, 0, 6], [7, 1, 2, 9, 0, 8, 0, 4, 5], [4, 7, 0, 6, 9, 5, 3, 1, 2], [0, 6, 7, 0, 8, 4, 2, 9, 0], [0, 0, 0, 4, 7, 0, 0, 0, 9], [0, 0, 5, 3, 6, 0, 0, 7, 0], [0, 0, 0, 0, 5, 1, 8, 6, 7], [6, 9, 1, 8, 2, 7, 0, 0, 4] ] print start(A)
|