N Queens

作者: GakkiLove | 来源:发表于2018-05-24 22:02 被阅读0次

    Get all valid ways of putting N Queens on an N * N chessboard so that no two Queens threaten each other.

    Assumptions

    N > 0

    Return

    A list of ways of putting the N Queens
    Each way is represented by a list of the Queen's y index for x indices of 0 to (N - 1)

    Example

    N = 4, there are two ways of putting 4 queens:

    [1, 3, 0, 2] --> the Queen on the first row is at y index 1, the Queen on the second row is at y index 3, the Queen on the third row is at y index 0 and the Queen on the fourth row is at y index 2.

    [2, 0, 3, 1] --> the Queen on the first row is at y index 2, the Queen on the second row is at y index 0, the Queen on the third row is at y index 3 and the Queen on the fourth row is at y index 1.

    class Solution(object):
        def nqueens(self, n):
          res = []
          self.dfs(n,0,[],res)
          return res
        
        def dfs(self,n,i,state.res):
          if i == n:
            res.append(state[:])
            return 
          for pos in xrange(n):
            if self.isValid(state,pos):
              state.append(pos)
              self.dfs(n,i+1,state,res)
              state.pop()
          return 
        
        def isValid(self,state,pos):
          for i in xrange(len(state)):
            if abs(state[i] - pos) in (0,len(state) - i):
              return False
          return True
    

    相关文章

      网友评论

          本文标题:N Queens

          本文链接:https://www.haomeiwen.com/subject/tesejftx.html