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()
相关推荐
兵慌码乱2 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵4 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio7 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663679 小时前
使用 Python 从零创建 Word 文档
python
Csvn13 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽14 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户5569188175316 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱1 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei1 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python