国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

8個(gè)步驟教你用Python解數(shù)獨(dú)!(內(nèi)含源碼)

cikenerd / 3795人閱讀

摘要:數(shù)獨(dú)的規(guī)則為每個(gè)謎題都由一個(gè)在不同位置給與提示數(shù)字的網(wǎng)格組成。游戲的目的是將空方格填上數(shù)字,使得每一行,每一列以及每一個(gè)宮都沒有重復(fù)的數(shù)字出現(xiàn)。

前言

利用Python來解數(shù)獨(dú)~~~
起因大概是:
自己解數(shù)獨(dú)實(shí)在是太費(fèi)勁了!!!

代碼效果展示

所需工具

python版本: 3.5.4

主要思路

思路很簡單:

將每個(gè)空格可能填入的數(shù)先列舉出來,然后就是深搜來解數(shù)獨(dú)。

數(shù)獨(dú)的規(guī)則為:

每個(gè)謎題都由一個(gè)在不同位置給與提示數(shù)字的9x9網(wǎng)格組成。游戲的目的是將空方格填上數(shù)字,使得每一行,每一列以及每一個(gè)3x3宮都沒有重復(fù)的數(shù)字出現(xiàn)。

代碼實(shí)現(xiàn)

</>復(fù)制代碼

  1. # 點(diǎn)類class point():
  2. def __init__(self, x, y):
  3. self.x = x
  4. self.y = y
  5. self.available = []
  6. self.value = 0# 該空格所在行有哪些數(shù)def rowNum(p ,sudoku):
  7. # set用于去重,因?yàn)?不止一個(gè)!
  8. row = set(sudoku[p.y*9: (p.y+1)*9])
  9. row.remove(0)
  10. return row# 該空格所在列有哪些數(shù)def colNum(p, sudoku):
  11. col = []
  12. length = len(sudoku)
  13. for j in range(p.x, length, 9):
  14. col.append(sudoku[j])
  15. col = set(col)
  16. col.remove(0)
  17. return col# 該空格所在小九宮有哪些數(shù)def blockNum(p, sudoku):
  18. block_x = p.x//3
  19. block_y = p.y//3
  20. block = []
  21. start_point = block_y*3*9 + block_x*3
  22. for j in range(start_point, start_point+3):
  23. block.append(sudoku[j])
  24. for j in range(start_point+9, start_point+9+3):
  25. block.append(sudoku[j])
  26. for j in range(start_point+9+9, start_point+9+9+3):
  27. block.append(sudoku[j])
  28. block = set(block)
  29. block.remove(0)
  30. return block# 初始化,作用為:# 把每個(gè)空格可能的點(diǎn)先列舉出來# 比如空格所在的行和列還有小九宮內(nèi)有數(shù)字1、2、3# 那么空格只能填入4、5、6、7、8、9中的某個(gè)數(shù)def initialize(sudoku):
  31. sudokuList = []
  32. length = len(sudoku)
  33. for index in range(length):
  34. # 找到需要填入的單元,即空格
  35. if sudoku[index] == 0:
  36. p = point(index%9, index//9)
  37. for i in range(1, 10):
  38. # 如果行、列、小九宮中均沒有i這個(gè)數(shù)
  39. if (i not in rowNum(p, sudoku)) and (i not in colNum(p, sudoku)) and (i not in blockNum(p, sudoku)):
  40. p.available.append(i)
  41. sudokuList.append(p)
  42. return sudokuList# 檢驗(yàn)該數(shù)填入空格后是否滿足數(shù)獨(dú)規(guī)則def check(p, sudoku):
  43. if p.value == 0:
  44. return False
  45. if (p.value not in rowNum(p, sudoku)) and (p.value not in colNum(p, sudoku)) and (p.value not in blockNum(p, sudoku)):
  46. return True
  47. else:
  48. return False# 展示數(shù)獨(dú)結(jié)果def showResult(sudoku):
  49. for r in range(9):
  50. for c in range(9):
  51. print("%d " % (sudoku[r*9+c]), end="")
  52. print("")# 深搜來解數(shù)獨(dú)def solve(p, sudoku):
  53. available_Num = p.available
  54. for ava in available_Num:
  55. p.value = ava
  56. if check(p, sudoku):
  57. sudoku[p.y*9+p.x] = p.value
  58. if len(sudokuList) < 1:
  59. showResult(sudoku)
  60. exit()
  61. p_next = sudokuList.pop()
  62. solve(p_next, sudoku)
  63. sudoku[p_next.y*9+p_next.x] = 0
  64. sudoku[p.y*9+p.x] = 0
  65. p_next.value = 0
  66. sudokuList.append(p_next)
  67. else:
  68. passif __name__ == "__main__":
  69. # 0代表需要填入的單元,即空格
  70. sudoku = [
  71. 0, 0, 0, 0, 0, 0, 0, 0, 0,
  72. 0, 9, 3, 6, 2, 8, 1, 4, 0,
  73. 0, 6, 0, 0, 0, 0, 0, 5, 0,
  74. 0, 3, 0, 0, 1, 0, 0, 9, 0,
  75. 0, 5, 0, 8, 0, 2, 0, 7, 0,
  76. 0, 4, 0, 0, 7, 0, 0, 6, 0,
  77. 0, 8, 0, 0, 0, 0, 0, 3, 0,
  78. 0, 1, 7, 5, 9, 3, 4, 2, 0,
  79. 0, 0, 0, 0, 0, 0, 0, 0, 0,
  80. ]
  81. sudokuList = initialize(sudoku)
  82. print("數(shù)獨(dú)題目為:/n")
  83. showResult(sudoku)
  84. print("/n數(shù)獨(dú)的解為:/n")
  85. p_first = sudokuList.pop()
  86. solve(p_first, sudoku)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/119756.html

相關(guān)文章

  • 數(shù)獨(dú)求解(javascript實(shí)現(xiàn))

    摘要:數(shù)獨(dú)技巧直觀法候選數(shù)法相關(guān)二十格一個(gè)數(shù)字只與其所在行列及小九宮格的二十格相關(guān)我的思路精心設(shè)計(jì)了有效性判定函數(shù),最多一次遍歷個(gè)小單元格就能做出方案的有效性判定。 看《算法的樂趣》,試著用非遞歸窮舉來解數(shù)獨(dú),看效率如何! 數(shù)獨(dú)規(guī)則 數(shù)獨(dú)游戲,經(jīng)典的為9×9=81個(gè)單元格組成的九宮格,同時(shí)也形成了3×3=9個(gè)小九宮格,要求在81個(gè)小單元格中填入數(shù)字1~9,并且數(shù)字在每行每列及每個(gè)小九宮格中都...

    Berwin 評論0 收藏0
  • 手把手你用python制作屬于你的第一個(gè)詞云

    摘要:利用強(qiáng)大的語言制作屬于自己的第一張?jiān)~云。還有一件很有意思的事情,和的中文意思,都是蟒蛇。好,接下來進(jìn)入正題,一步一步實(shí)現(xiàn)我們的第一張?jiān)~云。但是我們?nèi)绻獙χ形倪M(jìn)行分析,還必須要借助中文分詞技術(shù)。 相信很多人在網(wǎng)上,或者是在一些報(bào)告或者ppt上,都看到過類似這種圖片 showImg(https://segmentfault.com/img/bVQRr0?w=1920&h=919); 你可...

    happyfish 評論0 收藏0
  • 前端每日實(shí)戰(zhàn):164# 視頻演示如何用原生 JS 創(chuàng)作一個(gè)數(shù)獨(dú)訓(xùn)練小游戲(內(nèi)含 4 個(gè)視頻)

    摘要:第部分第部分第部分第部分源代碼下載每日前端實(shí)戰(zhàn)系列的全部源代碼請從下載代碼解讀解數(shù)獨(dú)的一項(xiàng)基本功是能迅速判斷一行一列或一個(gè)九宮格中缺少哪幾個(gè)數(shù)字,本項(xiàng)目就是一個(gè)訓(xùn)練判斷九宮格中缺少哪個(gè)數(shù)字的小游戲。 showImg(https://segmentfault.com/img/bVbkNGa?w=400&h=300); 效果預(yù)覽 按下右側(cè)的點(diǎn)擊預(yù)覽按鈕可以在當(dāng)前頁面預(yù)覽,點(diǎn)擊鏈接可以全屏預(yù)...

    Heier 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<