1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          回溯法——數獨游戲

          來源:互聯網轉載 時間:2024-01-29 08:29:16

          一、問題描述

          數獨(Sudoku)是一款大眾喜愛的數字邏輯游戲。玩家需要根據9X9盤面上的已知數字,推算出所有剩余空格的數字,并且滿足每一行、每一列、每一個粗線宮內的數字均含1-9,并且不重復。
          輸入:
          包含已知數字的9X9盤面數組[空缺位以數字0表示]
          輸出:
          完整的9X9盤面數組

          輸入示例:

          0 9 2 4 8 1 7 6 34 1 3 7 6 2 9 8 58 6 7 3 5 9 4 1 26 2 4 1 9 5 3 7 87 5 9 8 4 3 1 2 61 3 8 6 2 7 5 9 42 7 1 5 3 8 6 4 93 8 6 9 1 4 2 5 70 4 5 2 7 6 8 3 1

          輸出示例:

          5 9 2 4 8 1 7 6 34 1 3 7 6 2 9 8 58 6 7 3 5 9 4 1 26 2 4 1 9 5 3 7 87 5 9 8 4 3 1 2 61 3 8 6 2 7 5 9 42 7 1 5 3 8 6 4 93 8 6 9 1 4 2 5 79 4 5 2 7 6 8 3 1

          二、思路

          對于這個題我們的第一思路當然是用深度遍歷回溯法來完成。

          首先將數字存在9*9的二維數組數據結構內,其次尋找值為0的元素,將其換成1到9任一個數字。

            若能滿足稱為數獨的三個條件,則繼續往下搜索值為0的元素。

              同樣將其換成0到9之間的任意數字,若發現所有的數字都不滿足條件的話,則回溯到上一個點,并把該點的值繼續換成其他數字。

            直到所有的81個點都遍歷完,若遍歷完發現沒有滿足條件的值可以填滿值為0的位子,則返回False。

          三、代碼實現

          首先我們先寫一個函數來判斷數字num是否可以放到9*9矩陣的(row,col)位置上。

          def check(matrix,row,col,value):    """    檢測在(row,col)放value是否合適    1.每行含1-9,不含重復值value    2.每列含1-9,不含重復值value    3.3*3區塊含1-9,不含重復值value    """    #檢測每行    for j in range(9):        if matrix[row][j]==value:            return False    #檢測每列    for i in range(9):        if matrix[i][col]==value:            return False    # 檢測元素所在3*3區域    area_row=row//3*3    area_col=col//3*3    for i in range(area_row,area_row+3):        for j in range(area_col,area_col+3):            if matrix[i][j]==value:                return False    return True

          然后我們就可以用回溯法來完成數獨游戲了:

          def solveSudoku(matrix,count=0):    """    遍歷每一個未填元素,遍歷1-9替換為合適的數字    """    if count==81:#遞歸出口        return True    row=count//9#行標    col=count%9#列標    if matrix[row][col]!=0:#已填充        return solveSudoku(matrix,count=count+1)    else:#未填充        for i in range(1,10):            if check(matrix,row,col,i):#找到可能的填充數                matrix[row][col]=i                if solveSudoku(matrix,count=count+1):#是否可完成                    return True#可完成                #不可完成                matrix[row][col]=0#回溯, i換個數繼續走        return False#不可完成matrix=[]for i in range(9):    matrix.append(list(map(int,input().split())))# print(matrix)solveSudoku(matrix,0)# print(solveSudoku(matrix,0))# for i in range(9):#     print (' '.join(map(str,matrix[i])))# print(matrix)for li in matrix:    print(' '.join(list(map(str,li))))

          這里值得注意的一點是,我們可以用遞歸函數來判斷,若我們將當前點的值設為 i 時,其余點是否可以完成數獨游戲,即:

          for i in range(1,10):            if check(matrix,row,col,i):#找到可能的填充數                matrix[row][col]=i                if solveSudoku(matrix,count=count+1):#是否可完成                    return True#可完成

          如果不能完成的話,則回溯,我們這里只需要將matrix[row][col]設為0,然后讓他接著遍歷0-9中的其余數即可。

          標簽:數獨魔術-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          如何買到最便宜的北京到昆明機票?2017年1月12日,北京至昆明特價機票經濟艙價格為1020;特價機票可以根據您的需求提前在芒果網預定!幾月份北京到昆明機票最便宜?每年6月底7月初最便宜。今年受流感影響,每年這個時候的機票折扣都是近年來最低的。有消息稱10號以后會漲,具體折扣還不確定?,F在6天往返機票不到8折。740元包含機場建設,現在東航、國航、海航都是這個價。北京到昆明的飛機票價多少?每天票價...

          500元等于多少?答:3360500元可以等于500元。但是,從題目的問題中,我們可以猜測出多種情況。500元可以是、越南、等外幣。隨著世界貿易組織積極推動各國經濟發展,各國貨幣可以進入世界貿易進行兌換,但總體上還是以強國經濟為主。500元等于多少?500元相當于500元。元是,我國的貨幣單位。是的法定貨幣,是全國管理的主管機關,負責的設計、印制和發行。的單位是,的輔幣是分和美分。1元等于10角,...

          用ps怎么做金屬牌子?1.首先新建一個800px*800px的畫布,命名為texture icon,在背景中添加圖層樣式。2.使用圓角矩形工具,繪制一個圓角半徑為90px的450px*540px的基座,并為其添加圖層樣式。3.接下來繼續使用圓角矩形工具,畫一個390px*390px圓角半徑為90px的形狀,命名為Bas浮雕水印怎么使用?1.雙擊桌面打開PS。2.使用快捷鍵ctrl n完成畫布命名等...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>