Python解决n皇后
问题: 将n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击,给你一个整数n,返回所有不同的n皇后问题的解决方案
1.1<=n<=9
2.该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位
3.皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行,纵行或斜线上
def gen_board(n, queens):
result = []
rows = ["."] * n
for i in range(n):
rows[queens[i]] = "Q"
result.append("".join(rows))
rows[queens[i]] = "."
return result
def back_track(line_num, n, queens, solutions, columns, diagonal1, diagonal2):
if line_num == n:
result = gen_board(n, queens)
solutions.append(result)
return
for i in range(n):
if i in columns or line_num - i in diagonal1 or line_num + i in diagonal2:
continue
queens[line_num] = i
columns.add(i)
diagonal1.add(line_num - i)
diagonal2.add(line_num + i)
back_track(line_num + 1, n, queens, solutions, columns, diagonal1, diagonal2)
columns.remove(i)
diagonal1.remove(line_num - i)
diagonal2.remove(line_num + i)
def solve_n_queens(n):
solutions = []
queens = [-1] * n
# 判断是否在一列
columns = set()
# 左斜线(左斜线上的每个值 横坐标减纵坐标 相等)
diagonal1 = set()
# 右斜线(右斜线上的每个值 横坐标加纵坐标 相等)
diagonal2 = set()
back_track(0, n, queens, solutions, columns, diagonal1, diagonal2)
return solutions
if __name__ == '__main__':
a = solve_n_queens(4)
print(len(a))
for x in a:
print("*" * 20)
for y in x:
print(y)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix