日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

有效的数独 python_Python判断有效的数独算法示例

發布時間:2023/12/10 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有效的数独 python_Python判断有效的数独算法示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了Python判斷有效的數獨算法。分享給大家供大家參考,具體如下:

一、題目

判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。

1. 數字 1-9 在每一行只能出現一次。

2. 數字 1-9 在每一列只能出現一次。

3. 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。

數獨部分空格內已填入了數字,空白格用 ‘.' 表示。

例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"]

]

輸出: true

例2:

輸入:

[

["8","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"]

]

輸出: false

解釋: 除了第一行的第一個數字從 5 改為 8 以外,空格內其他數字均與 示例1 相同。

但由于位于左上角的 3x3 宮內有兩個 8 存在, 因此這個數獨是無效的。

二、解法

先創建三個空數組 row、col、cell,以 cell 為例,里面的每個空字典都代表一個 3×3單元格,然后我們需要把數據一個個填進去

遍歷整個二維數組,然后邊遍歷邊把數組分別存入到 行 row , 列 col , 3×3單元格 cell 內的字典,存為key ,而不是 value 。

然后我們就可以判斷,行、列、3×3單元格 對應的字典內是否已經存在board[x][y]這個鍵名,如果存在,那么說明重復了,返回 False

注意,字典中的值這里都為1,但是沒有任何意義,你可以隨意更改

把數組存入 3×3的單元格是一個難點,num = 3*(x//3)+y//3,這個式子是關鍵,可以找個數獨,然后代入進去好好理解下

當然你也可以不用這個式子,用if/else語句來判斷也行,那樣比較好理解,但是不如這個式子簡潔

類似于: if y<3 : ... elif 3<=y<6 : ... elif 6<=y : ...,

代碼如下:

#row,col,cell分別代表行,列,3x3單元格

row, col, cell =

[{}, {}, {}, {}, {}, {}, {}, {}, {}],

[{}, {}, {}, {}, {}, {}, {}, {}, {}],

[{}, {}, {}, {}, {}, {}, {}, {}, {}]

for x in range(9):

for y in range(9):

#取得單元格

num = 3*(x//3)+y//3

temp = board[x][y]

#不需要存入 '.'

if temp != '.':

if (temp not in row[x]

and temp not in col[y]

and temp not in cell[num]):

row[x][temp] = '1'

col[y][temp] = '1'

cell[num][temp] = '1'

else:

return False

return True

時間 64ms,擊敗了 99.3%

希望本文所述對大家Python程序設計有所幫助。

總結

以上是生活随笔為你收集整理的有效的数独 python_Python判断有效的数独算法示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。