假設-判斷-假設
class
solution()
:def
solve
(self,arr)
: self.helper(arr,0)
defhelper
(self,arr,index)
:if index==81:
print
(arr)
return
else
:if arr[index]==0
:# 0代表需要填充資料
for i in
range(1
,10):
if self.isvaild(arr,index,i)
: arr[index]
=i self.helper(arr,index+1)
arr[index]=0
# 如果假設下乙個格仔失敗就將本次的假設取消。
else
: self.helper(arr,index+1)
defisvaild
(self,arr,index,i)
: line = index//
9 column = index %
9if i in arr[line*
9:line*9+
9]:# 判斷這一行
return
false
if i in
[arr[j]
for j in
range
(len
(arr)
)if j%
9==column]
:# 判斷這一列
return
false
for l in
range
(line//3*
3,line//3*
3+3)
:# 判斷這個九宮格內
for c in
range
(column//3*
3,column//3*
3+3)
:if arr[l*
9+c]
==i:
return
false
return
true
if __name__ ==
'__main__'
: arr =[4
,1,0
,0,0
,7,8
,5,0
,8,0
,6,0
,0,0
,0,0
,9,0
,2,0
,0,9
,0,6
,0,0
,0,0
,4,0
,0,0
,0,1
,2,2
,0,0
,5,8
,0,0
,7,0
,0,0
,0,0
,0,0
,5,0
,0,0
,0,0
,7,0
,2,0
,0,0
,0,0
,8,0
,1,0
,0,0
,0,0
,7,0
,0,6
,0,0
,0,0
,]arr =[0
,6,4
,1,0
,9,3
,0,0
,0,3
,0,0
,0,0
,7,0
,0,0
,0,1
,0,0
,2,0
,0,0
,3,0
,9,7
,4,5
,0,0
,0,6
,4,8
,0,1
,0,5
,2,7
,0,5
,0,0
,8,0
,0,3
,0,7
,8,5
,3,2
,4,1
,0,6
,2,9
,5,8
,5,0
,0,7
,0,4
,1,0
,6,9
,0,2
,0,8
] my_solution = solution(
) my_solution.solve(arr)
回溯法解數獨
前天在我的小pad上裝了個數獨遊戲,完了幾把後興趣索然了。不過突然想起來一直想寫個解數獨的程式,不過因為懶和拖拉,就一直沒寫。今天花了30分鐘寫了個解數獨的程式,貼 include include include 某個數字填入後,需要檢查的index void get affected index ...
leetcode 解數獨 回溯法
如 方法 回溯法 回溯法的思想就是 對於乙個問題有多個選擇方式,先選擇乙個方式執行下去,若在執行過程中,發現不符合規則,則回退,回到選擇方式的步驟,進而選擇其他方式,繼續試。重要 對於回溯法,一定會有個 規則 這個 規則 將會決定是否回退,所以當我們在使用回溯法時,一定要留意能否構建 規則 如這一題...
解數獨(深搜 回溯)
本題hard難度但是解體思路就是很普通的深搜 回溯 需要考慮的點是遞迴的深搜進行的條件和狀態的記錄 用boolean陣列來記錄每個行 列 九宮格裡1 9的存在情況 先遍歷一次原陣列,記錄空格的位置並對boolean陣列進行初始化 然後對空格位置進行dfs。class solution else df...