国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python判斷有效的數獨算法示例

2020-02-16 01:19:42
字體:
來源:轉載
供稿:網友

本文實例講述了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 Falsereturn True            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 礼泉县| 故城县| 和顺县| 沙雅县| 图木舒克市| 北宁市| 开阳县| 巴南区| 泗洪县| 安顺市| 日喀则市| 青浦区| 福州市| 永仁县| 吴堡县| 兰州市| 雷州市| 郸城县| 阜阳市| 稻城县| 广饶县| 西青区| 开阳县| 扎兰屯市| 镇雄县| 朝阳市| 宿州市| 横峰县| 剑阁县| 英超| 卢湾区| 江陵县| 福泉市| 南岸区| 湖口县| 无棣县| 佛教| 江西省| 泰和县| 永州市| 城固县|