您的位置:首页 > 编程语言 > Python开发

[LeetCode]题解(python):051-N-Queens

2015-11-16 13:24 555 查看
[b]题目来源:[/b]

  https://leetcode.com/problems/n-queens/

[b]题意分析:[/b]

  这是一个N-后问题。在一个N×N的国际象棋板上放N个皇后使得这些皇后使得他们互相不能攻击。也就是一个皇后的行列和斜都没有其他的皇后。返回所有满足上述条件的所有结果。

[b]题目思路:[/b]

  这题和前面的数独类似。首先要确定添加一个皇后的时候判断是否符合条件。利用回溯法每行或者每列添加皇后。

[b]代码(python):[/b]

  

class Solution(object):
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
def isqueens(depth,j):
for i in range(depth):
if board[i] == j or abs(depth - i) == abs(board[i] - j):
return False
return True
def dfs(depth,row):
if depth == n:
ans.append(row);return
for i in range(n):
if isqueens(depth,i):
board[depth]= i
dfs(depth + 1,row + ['.'*i + 'Q' + '.'*(n - i - 1)])
board = [-1 for i in range(n)]
ans = []
dfs(0,[])
return ans


View Code

转载请注明出处:http://www.cnblogs.com/chruny/p/4968648.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: