python 數獨資料介面

2021-10-23 03:14:28 字數 4708 閱讀 4559

1、呼叫sudokumaker()初始化數獨建立例項

2、例項呼叫setsudimaker()可以建立乙個數獨, 引數為難度, 選填1-30,每+1會增加兩個空

3、例項呼叫getarr()獲取數獨,為乙個二元陣列, 為 0 的地方表示此處為空

4、例項呼叫getanswer()獲取一種數獨答案,同樣為乙個二元陣列

5、例項呼叫iswrong()上傳數獨答案,會返回第乙個錯誤的位置,沒有錯誤則返回false

import random, copy

class

sudokumaker()

: def setsudomaker

(self, grade)

: self.grade = grade

self.arr =[[

0]*9

for i in range(9

)] self.sodoku =[[

0]*9

for i in range(9

)] self.game =[[

0]*9

for i in range(9

)]self.answer =[[

0]*9

for i in range(9

)] self.

rand(15

) self.

dfs(self.arr,0)

self.

diger

(grade)

def rand

(self, num)

: t =

0while num:

x = random.

randint(0

,8) y = random.

randint(0

,8) n = random.

randint(1

,9)if

(self.arr[x]

[y]==0)

& self.

istrue

(x, y, n, self.arr)

: self.arr[x]

[y]= n

num -=

1 def istrue

(self, x, y, n, array)

: a =(0

if(x <3)

else3)

if(x <6)

else

6 b =(0

if(y <3)

else3)

if(y <6)

else

6for i in range

(a, a +3)

:for j in range

(b, b +3)

:if array[i]

[j]== n:

return false

for i in range(9

):if(array[x]

[i]== n)

|(array[i]

[y]== n)

:return false

return true

flag = false

def dfs

(self, array, deepth)

:if deepth <81:

if self.flag:

return

if array[

int(deepth /9)

][deepth %9]

==0:for i in range(1

,10):

if self.

istrue

(int

(deepth /9)

, deepth %

9, i, self.arr)

: array[

int(deepth /9)

][deepth %9]

= i self.

dfs(array, deepth +1)

array[

int(deepth /9)

][deepth %9]

=0else

: self.

dfs(array, deepth +1)

else

: self.flag = true

self.sodoku = copy.

deepcopy

(array)

self.answer = copy.

deepcopy

(array)

def getdignumber

(self, grade):if

(grade <=30)

&(grade >=1)

:return grade *

2else

:return

7 def diger

(self, grade)

: t =

int(self.

getdignumber

(grade)

)while t:

x = random.

randint(0

,8) y = random.

randint(0

,8)if self.sodoku[x]

[y]!=0:

self.sodoku[x]

[y]=

0 t -=

1 self.game = copy.

deepcopy

(self.sodoku)

def getarr

(self)

:return self.game

def getanswer

(self)

:return self.answer

def iswrong

(self, array)

:for i in range(9

):for j in range(9

):if self.

getarr()

[i][j]==0

: temp = array[i]

[j] array[i]

[j]=

0if not self.

istrue

(i, j, temp, array)

:return

(i,j)

array[i]

[j]= temp

return false

def main()

:"""

說明:1、呼叫sudokumaker

()初始化數獨建立例項

2、例項呼叫setsudimaker

()可以建立乙個數獨, 引數為難度, 選填1

-30,每+

1會增加兩個空

3、例項呼叫getarr

()獲取數獨,為乙個二元陣列, 為 0 的地方表示此處為空

4、例項呼叫getanswer

()獲取一種數獨答案,同樣為乙個二元陣列

5、例項呼叫iswrong

()上傳數獨答案,會返回第乙個錯誤的位置,沒有錯誤則返回false

"""# 示例**

mkr =

sudokumaker()

mkr.

setsudomaker(30

)print

(mkr.

getarr()

)print

(mkr.

getanswer()

) a =[[

1,3,

4,5,

7,8,

6,9,

2],[

7,2,

8,6,

1,9,

3,4,

5],[

6,9,

5,3,

4,2,

7,1,

8],[

4,7,

1,8,

3,5,

2,6,

9],[

3,5,

6,2,

9,1,

4,8,

7],[

9,8,

2,4,

6,7,

5,3,

1],[

2,4,

7,1,

8,3,

9,5,

6],[

5,1,

3,9,

2,6,

8,7,

4],[

8,6,

9,7,

5,4,

1,2,

3]]print

(mkr.

iswrong

(a))

if __name__ ==

"__main__"

:main

()

缺點:10次生成有一次會生成失敗,這是python本身的缺陷,不能遞迴1000次。

python 數獨 Python中的數獨檢查器

我正在嘗試用python建立乙個數獨檢查器 ill formed 5,3,4,6,7,8,9,1,2 6,7,2,1,9,5,3,4,8 1,9,8,3,4,2,5,6,7 8,5,9,7,6,1,4,2,3 4,2,6,8,5,3,7,9 7,1,3,9,2,4,8,5,6 9,6,1,5,3,7...

36 有效的數獨 Python

判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 表示。示例 1 輸入 5 3 7 6 1 9 5 9 8 6 8 6 3 4 8 3 1 7 2 6 6 2 8 4 1 9 5 8 7 9 輸...

LeetCode 有效的數獨(python)

題目 判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨 數獨部分空格內已填入了數字,空白格用 表...