3
所以我寫了一個數獨求解器,它使用9x9陣列作爲網格,9x9x9陣列作爲它的可能性。由於我正在使用的回溯算法,我必須檢查數獨是否仍然有效,又名:Numpy:多維數組的真值比較
如果有一個字段不包含數字並且沒有剩餘可能性,則返回False。 到目前爲止我實施瞭如下:
for j in range(9):
for i in range(9):
if puzzle[j,i] == 0 and (solving[j,i] == 0).sum() == 9:
return False
return True
如果在正方形(J,I)含有,例如,選項2,圖3和圖7所示,根據可能性陣列將是:
solving[j,i] = array([0, 2, 3, 0, 0, 0, 7, 0, 0], dtype = int8)
我試圖避免在這裏和我的求職者其他地方這樣的循環。我試着如下:
solving[where(puzzle == 0)]
這返回一個n×9數組,其中n是我的拼圖中空方塊的數量。我希望函數返回false,如果任何與形狀1X9 n個陣列正好等於
array([0,0,0,0,0,0,0,0,0], dtype = int8)
但是,我沒有與各種嘗試,包括.ANY()和。所有()的實驗沒有成功。這是我使用的最新代碼:
def is_valid(self, puzzle, solving):
if (solving[py.where(puzzle == 0)].all() == 0).sum() > 0:
return False
return True
...總是返回False。對此進行編碼的正確方法是什麼?
太棒了!太簡單了:)我想我並不真正瞭解np.all()和np.any()是做什麼的。謝謝! – Epimetheus