N 皇后-力扣解题
2024-09-07 22:23:37
n 皇后问题 研究的是如何将 n 个皇后放置在 n*n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例 1:
输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1
输出:[["Q"]]
提示:
- 1 <= n <= 9
- 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。
n, *_ = map(int, input().split())
table = [['.']* n for _ in range(n)]
# 记录皇后以存在的列数
cols= []
def solveNQueens(n):
# 存答案的列表
res = []
for col in range(n):
table[0][col] = 'Q'
cols.append(col)
# 重第一行的位置开始尝试添加皇后,后面就往下面进行搜索
dfs(table, 1, 0, res)
# 搜完成后进行回溯
table[0][col] = '.'
cols.remove(col)
return res
import copy
def dfs(table, x, y, res) -> None:
if y == n:
return
if x == n:
res.append(copy.deepcopy(table))
return
if y not in cols:
if check(table,x, y):
table[x][y] = 'Q'
cols.append(y)
dfs(table, x+1, 0, res)
table[x][y] = '.'
cols.remove(y)
dfs(table, x, y+1, res)
def check(table, row, col):
for i in range(len(table)):
for j in range(len(table[0])):
if i+j == row+col or i-j == row-col:
if table[i][j] == 'Q':
return False
return True
def parse(a):
res = []
for i in range(len(a)):
b = []
for j in range(len(a[i])):
s = ''
for k in a[i][j]:
if k == '.':
s+='.'
if k == 'Q':
s+= 'Q'
b.append(s)
res.append(b)
return res
print(parse(solveNQueens(n)))
最新文章
- [LeetCode] Set Matrix Zeroes 矩阵赋零
- angularjs $scope.$watch(),监听值得变化
- JMF框架
- Sublime Text3下的markdown插件的安装及配置
- VBA使用的Randomize和DoEvents
- UVa12264 Risk(最大流)
- “我爱淘”冲刺阶段Scrum站立会议10
- 基于lnmp.org的xdebug安装
- 通过Servlet的response绘制页面验证码
- ffdshow 源代码分析1 : 整体结构
- BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )
- Product Management vs. Product Marketing
- D触发器深入详细介绍(zhuanzai)
- Oracle-13:Oracle中的表分区
- Element UI 中组件this.$message报错
- 学习Android过程中遇到的问题及解决方法——电话监听
- pymongo操作mongodb
- go中for循环使用多个变量避坑
- Github 快速上手实战教程
- spring的统一异常处理