day10-解數獨
數獨盤面是個九宮,每一宮又分為九個小格。在這八十一格中給出一定的已知數字和解題條件,利用邏輯和推理,
在其他的空格上填入1-9的數字。使1-9每個數字在每一行、每一列和每一宮中都只出現一次,所以又稱「九宮格」。
import numpy as npnndef sudoku(matrix,n=0):ntif n>=81:nttreturn matrixntif matrix.A1[n]:nttreturn sudoku(matrix,n+1)nnt# 找到當前數的坐標nt# 分別為行 列 所處的第幾個小方格(3*3為一個小方格)nti,j,k,l = n//9,n%9,n//27*3,(n%9)//3*3ntx = set(range(1,10)) - (nttset(matrix[i].A1) |nttset(matrix.T[j].A1) | nttset(matrix[k:k+3,l:l+3].A1)ntt)ntfor value in x:nttmatrix[i,j] = valuenttif sudoku(matrix,n+1) is not None:ntttreturn matrixnttelse:ntttmatrix[i,j] = 0nnif __name__ == __main__:ntx = np.matrix("""n 8 0 0 1 0 9 0 7 0;n 0 9 0 0 0 0 8 0 0;n 5 0 3 0 4 0 0 0 0;n 0 0 0 0 0 0 7 9 0;n 0 0 7 2 6 5 3 0 0;n 0 3 8 0 0 0 0 0 0;n 0 0 0 0 9 0 4 0 1;n 0 0 6 0 0 0 0 2 0;n 0 5 0 4 0 2 0 0 3nt""")ntres = sudoku(x)ntprint(res)n
有很多人不懂A1是什麼鬼
A1屬性就是將一個矩陣展開返回,官方文檔是這樣的
所以,小夥伴們,碰到不會的要勤於查找官方文檔哦
推薦閱讀:
※IDE中敲 name = Adam, age = 25,怎樣才能流暢敲鍵盤?
※最簡單的python爬蟲入門
※python 3.5 中 PEP0484 新加入的 Type Hints 的使用方法是什麼?
※用Python-Markdown和google-prettify來處理Markdown和代碼高亮
※Python 3.x 上 str 與 bytes 轉換函數是什麼?