leetcode

tech2022-10-27  99

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例:

输入:4 输出:[  [".Q..",  // 解法 1   "...Q",   "Q...",   "..Q."],

 ["..Q.",  // 解法 2   "Q...",   "...Q",   ".Q.."] ] 解释: 4 皇后问题存在两个不同的解法。

提示:

皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上

二、解题思路

DFS+回溯,逐行检查皇后位置(横行、纵行或斜线

三、代码

class Solution: def solveNQueens(self, n: int): res = [] path = [['.' for _ in range(n)] for _ in range(n)] def print_path(): for i in range(n): print(path[i]) print('\n') def change_style(path): new_path = [] for i in range(n): cow_path = '' for j in range(n): cow_path += path[i][j] new_path.append(cow_path) return new_path def isValid(r, c): for i in range(1, r + 1): if path[r - i][c] == 'Q': return False if c - i >= 0 and path[r - i][c - i] == 'Q': return False if c + i < n and path[r - i][c + i] == 'Q': return False return True def dfs(pos: int): if pos == n: change_style_path = change_style(path) res.append(change_style_path) return for i in range(n): if isValid(pos, i): path[pos][i] = 'Q' # print_path() dfs(pos + 1) path[pos][i] = '.' # print_path() dfs(0) return res if __name__ == '__main__': n = 4 ans_org = [['.', 'Q', '.', '.'], ['.', '.', '.', 'Q'], ['Q', '.', '.', '.'], ['.', '.', 'Q', '.']] s = Solution() ans = s.solveNQueens(n) print(ans) 悲恋花丶无心之人 认证博客专家 深度学习 神经网络 Pytorch 计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。个人GitHub网址为:https://github.com/nickhuang1996
最新回复(0)