zoukankan      html  css  js  c++  java
  • 回溯算法

    回溯算法

    • 排序方式
    • 查找单词
    • 八皇后问题
    • 解数独

    一.排序方式

    from IPython.display import Image
    Image(filename="./data/6_01.png",width=800,height=960)
    

    output_3_0.png

    原始方法

    def solvePermutationBadWay(array):
        solution=[]
        
        for i in range(len(array)):
            newSolution1=solution+[array[i]]
            newArray1=array[:i]+array[i+1:]
            
            for i in range(len(newArray1)):
                newSolution2=newSolution1+[newArray1[i]]
                newArray2=newArray1[:i]+newArray1[i+1:]
                
                for i in range(len(newArray2)):
                    newSolution3=newSolution2+[newArray2[i]]
                    newArray3=newArray2[:i]+newArray2[i+1:]
                    
                    for i in range(len(newArray3)):
                        newSolution4=newSolution3+[newArray3[i]]
                        print(newSolution4)
    
    array=["红","黄","蓝","绿"]
    solvePermutationBadWay(array)
    
    ['红', '黄', '蓝', '绿']
    ['红', '黄', '绿', '蓝']
    ['红', '蓝', '黄', '绿']
    ['红', '蓝', '绿', '黄']
    ['红', '绿', '黄', '蓝']
    ['红', '绿', '蓝', '黄']
    ['黄', '红', '蓝', '绿']
    ['黄', '红', '绿', '蓝']
    ['黄', '蓝', '红', '绿']
    ['黄', '蓝', '绿', '红']
    ['黄', '绿', '红', '蓝']
    ['黄', '绿', '蓝', '红']
    ['蓝', '红', '黄', '绿']
    ['蓝', '红', '绿', '黄']
    ['蓝', '黄', '红', '绿']
    ['蓝', '黄', '绿', '红']
    ['蓝', '绿', '红', '黄']
    ['蓝', '绿', '黄', '红']
    ['绿', '红', '黄', '蓝']
    ['绿', '红', '蓝', '黄']
    ['绿', '黄', '红', '蓝']
    ['绿', '黄', '蓝', '红']
    ['绿', '蓝', '红', '黄']
    ['绿', '蓝', '黄', '红']
    

    回溯方法

    def helper(array,solution):
        if len(array)==0:
            print(solution)
            return
    
        for i in range(len(array)):
            newSolution=solution+[array[i]]
            newArray=array[:i]+array[i+1:]
            helper(newArray,newSolution)
    
    array=["红","黄","蓝","绿"]
    helper(array,solution=[])
    
    ['红', '黄', '蓝', '绿']
    ['红', '黄', '绿', '蓝']
    ['红', '蓝', '黄', '绿']
    ['红', '蓝', '绿', '黄']
    ['红', '绿', '黄', '蓝']
    ['红', '绿', '蓝', '黄']
    ['黄', '红', '蓝', '绿']
    ['黄', '红', '绿', '蓝']
    ['黄', '蓝', '红', '绿']
    ['黄', '蓝', '绿', '红']
    ['黄', '绿', '红', '蓝']
    ['黄', '绿', '蓝', '红']
    ['蓝', '红', '黄', '绿']
    ['蓝', '红', '绿', '黄']
    ['蓝', '黄', '红', '绿']
    ['蓝', '黄', '绿', '红']
    ['蓝', '绿', '红', '黄']
    ['蓝', '绿', '黄', '红']
    ['绿', '红', '黄', '蓝']
    ['绿', '红', '蓝', '黄']
    ['绿', '黄', '红', '蓝']
    ['绿', '黄', '蓝', '红']
    ['绿', '蓝', '红', '黄']
    ['绿', '蓝', '黄', '红']
    

    完整代码

    class Solution():
        def __init__(self):
            pass
        
        def solvePermutation(self,array):
            self.helper(array,[])
          
        def helper(self,array,solution):
            if len(array)==0:
                print(solution)
                return
    
            for i in range(len(array)):
                newSolution=solution+[array[i]]
                newArray=array[:i]+array[i+1:]
                helper(newArray,newSolution)
    
    solution=Solution()
    
    solution.solvePermutation(array)
    
    ['红', '黄', '蓝', '绿']
    ['红', '黄', '绿', '蓝']
    ['红', '蓝', '黄', '绿']
    ['红', '蓝', '绿', '黄']
    ['红', '绿', '黄', '蓝']
    ['红', '绿', '蓝', '黄']
    ['黄', '红', '蓝', '绿']
    ['黄', '红', '绿', '蓝']
    ['黄', '蓝', '红', '绿']
    ['黄', '蓝', '绿', '红']
    ['黄', '绿', '红', '蓝']
    ['黄', '绿', '蓝', '红']
    ['蓝', '红', '黄', '绿']
    ['蓝', '红', '绿', '黄']
    ['蓝', '黄', '红', '绿']
    ['蓝', '黄', '绿', '红']
    ['蓝', '绿', '红', '黄']
    ['蓝', '绿', '黄', '红']
    ['绿', '红', '黄', '蓝']
    ['绿', '红', '蓝', '黄']
    ['绿', '黄', '红', '蓝']
    ['绿', '黄', '蓝', '红']
    ['绿', '蓝', '红', '黄']
    ['绿', '蓝', '黄', '红']
    
    class Solution(object):
        def __init__(self):
            pass
        
        def solveCombinationBadWay(self,array,n):
            solution=[]
            
            for i in range(len(array)):
                newSolutional=solution+[array[i]]
                newArray=array[i+1:]
                
                for i in range(len(newArray)):
                    newSolutiona2=newSolutional+[newArray[i]]
                    
                    print(newSolutiona2)
    
    solution=Solution()
    
    solution.solveCombinationBadWay(array,2)
    
    ['红', '黄']
    ['红', '蓝']
    ['红', '绿']
    ['黄', '蓝']
    ['黄', '绿']
    ['蓝', '绿']
    
    def helper(array,n,solution):
        if len(solution)==n:
            print(solution)
            return
        
        for i in range(len(array)):
            newSolution=solution+[array[i]]
            newArray=array[i+1:]
            helper(newArray,n,newSolution)
    
    array=["A","B","C","D"]
    
    helper(array,2,[])
    
    ['A', 'B']
    ['A', 'C']
    ['A', 'D']
    ['B', 'C']
    ['B', 'D']
    ['C', 'D']
    
    class Solution():
        def __init__(self):
            pass
        
        def solveCombination(self,array,n):
            self.helper(array,n,[])
            
        def helper(self,array,n,solution):
            if len(solution)==2:
                print(solution)
                return
            
            for i in range(len(array)):
                newSolution=solution+[array[i]]
                newArray=array[i+1:]
                self.helper(newArray,n,newSolution)
    
    solution=Solution()
    
    solution.solveCombination(array,2)
    
    ['A', 'B']
    ['A', 'C']
    ['A', 'D']
    ['B', 'C']
    ['B', 'D']
    ['C', 'D']
    

    二.单词查找

    Image(filename="./data/6_02.png",width=800,height=960)
    

    output_20_0.png

    def helper(board,current,row,column):
        if len(current)==0:
            return True
        
        if row>=0 and row<len(board) and column>=0 and column<len(board[0]):
            if board[row][column]==current[0]:
                board[row][column]=""
                
                if helper(board,current[1:],row-1,column):
                    return True
                
                if helper(board,current[1:],row+1,column):
                    return True
                
                if helper(board,current[1:],row,column-1):
                    return True
                
                if helper(board,current[1:],row,column+1):
                    return True
                
                board[row][column]=current[0]
                
        return False
    
    board=[
        ["a","c","r","y","l"],
        ["l","w","o","r","i"],
        ["a","f","d","l","c"],
        ["k","e","e","w","e"],
        ["o","d","r","o","s"]
    ]
    
    row=5
    column=5
    
    current="week"
    
    helper(board,current,row,column)
    
    False
    

    回溯方法

    class Solution(object):
        def __init__(self):
            pass
        
        def wordSearch(self,board,word):
            for i in range(len(board)):
                for j in range(len(board[0])):
                    if self.helper(board,word,i,j):
                        return True
                    
            return False
        
        def helper(self,board,current,row,column):
            if len(current)==0:
                return True
        
            if row>=0 and row<len(board) and column>=0 and column<len(board[0]):
                if board[row][column]==current[0]:
                    board[row][column]=""
                
                    if self.helper(board,current[1:],row-1,column):
                        return True
                
                    if self.helper(board,current[1:],row+1,column):
                        return True
                
                    if self.helper(board,current[1:],row,column-1):
                        return True
                
                    if self.helper(board,current[1:],row,column+1):
                        return True
                
                    board[row][column]=current[0]
                
            return False
    
    Solution().wordSearch(board,"week")
    
    True
    

    三.八皇后问题

    Image(filename="./data/6_03.png",width=800,height=960)
    

    output_27_0.png

    class Solution(object):
        def __init__(self):
            pass
        
        def solveNQueens(self,n):
            self.helper([-1]*n,0,n)
            
        def helper(self,columnPositions,rowIndex,n):
            if rowIndex==n:
                self.printSolution(columnPositions,n)
                return
            
            for column in range(n):
                columnPositions[rowIndex]=column
                
                if self.isValid(columnPositions,rowIndex):
                    self.helper(columnPositions,rowIndex+1,n)
                    
                    
        def isValid(self,columnPositions,rowIndex):
            for i in range(rowIndex):
                # 检查同列是否有皇后
                if columnPositions[i]==columnPositions[rowIndex]:
                    return False
                
                # 检查两条斜线上是否有皇后
                elif abs(columnPositions[i]-columnPositions[rowIndex])==rowIndex-i:
                    return False
                
            return True
        
        def printSolution(self,columnPositions,n):
            for row in range(n):
                line=""
                
                for column in range(n):
                    if columnPositions[row]==column:
                        line+="Q "
                        
                    else:
                        line+=". "
                print(line)
                
            print("
    ")
    
    Solution().solveNQueens(8)
    
    Q . . . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . Q . . . . 
    
    
    Q . . . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . Q . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . Q . . . 
    
    
    Q . . . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . Q . . . 
    . . Q . . . . . 
    
    
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    
    
    . Q . . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . . Q . . . . 
    
    
    . Q . . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . Q . . . . . . 
    . . . . . Q . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    . . . . . . . Q 
    . . Q . . . . . 
    . . . . Q . . . 
    
    
    . Q . . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    
    
    . Q . . . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . . . Q . . . 
    Q . . . . . . . 
    . . . Q . . . . 
    
    
    . Q . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    
    
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . Q . . 
    
    
    . . Q . . . . . 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    . . . . . Q . . 
    
    
    . . Q . . . . . 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . . Q . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    
    
    . . Q . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    
    
    . . Q . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . Q . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . Q . . . . . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . Q . . . . 
    
    
    . . Q . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    
    
    . . Q . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . Q . . 
    
    
    . . Q . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . Q . . . 
    
    
    . . Q . . . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . Q . . . 
    
    
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    
    
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . . Q . 
    
    
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . . Q . . . 
    
    
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . . . Q . . . 
    Q . . . . . . . 
    
    
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    
    
    . . . Q . . . . 
    . . . . . Q . . 
    Q . . . . . . . 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . Q . . . . . 
    . . . . . . Q . 
    
    
    . . . Q . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . Q . . . 
    
    
    . . . Q . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . Q . . . . . . 
    
    
    . . . Q . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . . . Q . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . Q . . . 
    Q . . . . . . . 
    . . . . . Q . . 
    
    
    . . . Q . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . Q . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . . . Q 
    
    
    . . . Q . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    
    
    . . . Q . . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    
    
    . . . Q . . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . . . Q . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . Q . . 
    
    
    . . . . Q . . . 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    
    
    . . . . Q . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . . Q . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . Q . . . . 
    
    
    . . . . Q . . . 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    
    
    . . . . Q . . . 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    Q . . . . . . . 
    
    
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . Q . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    . . . . . . . Q 
    . . Q . . . . . 
    
    
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . . Q . . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . . Q . 
    
    
    . . . . Q . . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . . Q . . . . 
    
    
    . . . . Q . . . 
    . . Q . . . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    
    
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . . Q . . . . 
    . Q . . . . . . 
    
    
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . . . . Q . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . . Q . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . . . Q 
    
    
    . . . . Q . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    
    
    . . . . Q . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . Q . . . . . . 
    
    
    . . . . Q . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . . . Q . 
    
    
    . . . . Q . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    
    
    . . . . . Q . . 
    Q . . . . . . . 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . Q . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    
    
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    
    
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . . Q . . . . . 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . . Q . 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . Q . 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . Q . . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . . . Q . . . 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    Q . . . . . . . 
    . . . Q . . . . 
    
    
    . . . . . Q . . 
    . . Q . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . Q . . . 
    
    
    . . . . . Q . . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . . . Q . 
    . . Q . . . . . 
    
    
    . . . . . Q . . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    
    
    . . . . . Q . . 
    . . . Q . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    
    
    . . . . . Q . . 
    . . . Q . . . . 
    . . . . . . Q . 
    Q . . . . . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . Q . . . 
    . . Q . . . . . 
    
    
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . . Q . . . . . 
    
    
    . . . . . . Q . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . Q . . . 
    
    
    . . . . . . Q . 
    . Q . . . . . . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . . . . Q . 
    . Q . . . . . . 
    . . . . . Q . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . Q . . . . 
    . . . . . . . Q 
    . . . . Q . . . 
    
    
    . . . . . . Q . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . . . . Q . . . 
    . Q . . . . . . 
    . . . Q . . . . 
    
    
    . . . . . . Q . 
    . . Q . . . . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . Q . . . 
    Q . . . . . . . 
    . . . . . Q . . 
    . . . Q . . . . 
    
    
    . . . . . . Q . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . Q . . . 
    . . . . . . . Q 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . . . . Q . 
    . . . Q . . . . 
    . Q . . . . . . 
    . . . . . . . Q 
    . . . . . Q . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . Q . . . 
    
    
    . . . . . . Q . 
    . . . . Q . . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . Q . . 
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    
    
    . . . . . . . Q 
    . Q . . . . . . 
    . . . Q . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . . Q . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    
    
    . . . . . . . Q 
    . Q . . . . . . 
    . . . . Q . . . 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    . . . . . Q . . 
    
    
    . . . . . . . Q 
    . . Q . . . . . 
    Q . . . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . Q . . . 
    . . . . . . Q . 
    . . . Q . . . . 
    
    
    . . . . . . . Q 
    . . . Q . . . . 
    Q . . . . . . . 
    . . Q . . . . . 
    . . . . . Q . . 
    . Q . . . . . . 
    . . . . . . Q . 
    . . . . Q . . .
    

    四.解数独

    Image(filename="./data/6_04.png",width=800,height=960)
    

    output_31_0.png

    from IPython.display import Image
    
    Image(filename="./data/6_05.png",width=800,height=960)
    

    output_32_0.png

    class Solution(object):
        def __init__(self):
            pass
        
        def solveSudoku(self,board):
            self.helper(board,0)
            
        def helper(self,board,index):
            if index>=81:
                # 盘面已满,输出结果
                self.printSolution(board)
                return
            
            if board[index]==0:
                for i in range(1,10):
                    if self.isValid(board,index,i):
                        board[index]=i
                        self.helper(board,index+1)
                        board[index]=0
                        
            else:
                self.helper(board,index+1)
                
            
        def printSolution(self,board):
            for i in range(0,81,9):
                print(board[i:i+9])
                
        def isValid(self,board,index,num):
            # 当前格子的行数
            row=index//9
            # 当前格子的列数
            column=index%9
            
            # 检查和同列(下方)的格子是否矛盾
            for i in range(index+9,81,9):
                if board[i]==num:
                    return False
            # 检查和同列(上方)的格子是否矛盾    
            for i in range(index-9,-1,-9):
                if board[i]==num:
                    return False
             # 检查和同行的格子是否矛盾   
            for i in range(9*row,9*(row+1)):
                if board[i]==num:
                    return False
             # 检查和同粗线的格子是否矛盾   
            for i in range(row-row%3,3+row-row%3):
                for j in range(column-column%3,3+column-column%3):
                    if board[j+i*9]==num:
                        return False
                    
            return True
    
    board=[
        4,1,0,0,0,7,8,5,0,
        8,0,6,0,0,0,0,0,9,
        0,2,0,0,9,0,6,0,0,
        0,0,4,0,0,0,0,1,2,
        2,0,0,5,8,0,0,7,0,
        0,0,0,0,0,0,5,0,0,
        0,0,0,7,0,2,0,0,0,
        0,0,8,0,1,0,0,0,0,
        0,7,0,0,6,0,0,0,0,
    ]
    
    Solution().solveSudoku(board)
    
    [4, 1, 9, 6, 2, 7, 8, 5, 3]
    [8, 3, 6, 1, 5, 4, 7, 2, 9]
    [7, 2, 5, 3, 9, 8, 6, 4, 1]
    [5, 8, 4, 9, 7, 6, 3, 1, 2]
    [2, 9, 3, 5, 8, 1, 4, 7, 6]
    [1, 6, 7, 2, 4, 3, 5, 9, 8]
    [6, 4, 1, 7, 3, 2, 9, 8, 5]
    [3, 5, 8, 4, 1, 9, 2, 6, 7]
    [9, 7, 2, 8, 6, 5, 1, 3, 4]
    
  • 相关阅读:
    Linux 笔记 —— SVN和FTP的安装
    在.NET中使用Javascript作为脚本语言(v8最新版)
    回调的经典应用
    Javascript.NET(V8Wrapper) 更新,自定义映射别名
    SQLServer 的视图自带缓存特效?!
    关于 Twing Hot Link 的一些事
    Twing Hot Link For PSP 开发笔记(1)
    新闻发布系统
    Spring MVC入门讲解
    f(f(x))=x, 纯数学理解
  • 原文地址:https://www.cnblogs.com/LQ6H/p/12940558.html
Copyright © 2011-2022 走看看