N皇后问题(python)

描述:

给定一个棋盘,求可以在棋盘上放置n个皇后的方案。对于放置皇后的位置,要求同一行同一列只能放置一个皇后。同时,斜向的45度方向也只能放置一个皇后。

复制代码
#N皇后问题
def isValid(r,c,grid,n):
    #检查列
    for i in range(r):
        if grid[i][c]=='Q':
            return False
    #检查左斜线
    i=r-1
    j=c-1
    while i>=0 and j>=0:
        if grid[i][j]=='Q':
            return False
        i-=1
        j-=1
    #检查右斜线
    k=r-1
    p=c+1
    while k>=0 and p<n:
        if grid[k][p]=='Q':
            return False
        k-=1
        p+=1
    return True
def Queens(n):
    #先构建棋盘
    grid=[['.'for _ in range(n)]for _ in range(n)]
    res=[]
    def dfs(row):
        if row==n:
            #收集答案
            res.append(["".join(r) for r in grid])
        for i in range(n):
            if isValid(row,i,grid,n): #当前位置是否能放置皇后
                grid[row][i]='Q'
                dfs(row+1)
                grid[row][i]='.'
    dfs(0)
    print(res)
    return res
def main():
    n=int(input())
    Queens(n)
if __name__=="__main__":
    main()
相关推荐
m0_377618232 小时前
mysql如何设置字段为自动递增_使用alter table添加auto increment
jvm·数据库·python
Wyz201210242 小时前
Navicat导入HTML网页报错怎么跳过_忽略错误记录高级选项
jvm·数据库·python
小江的记录本2 小时前
【网络安全】《网络安全三大加密算法结构化知识体系》
java·前端·后端·python·安全·spring·web安全
InfinteJustice2 小时前
CSS Grid布局如何实现响应式卡片网格_结合媒体查询调整列数
jvm·数据库·python
2301_813599552 小时前
HTML函数开发用金属机身笔记本散热更好吗_材质对温控影响【指南】
jvm·数据库·python
2401_837163892 小时前
mysql如何实现定时清理缓存数据_利用event scheduler执行
jvm·数据库·python
m0_493934532 小时前
如何在phpMyAdmin中导出包含虚拟生成列的表_GENERATED ALWAYS的处理
jvm·数据库·python
qq_206901392 小时前
如何在 React 中正确使用 onClick 事件避免类型错误
jvm·数据库·python
像一只黄油飞2 小时前
第二章-02-注释
笔记·python·学习·零基础