【Python数据结构与算法】递归----N皇后问题

题目:N皇后问题

描述

国际象棋的棋盘是由8×8共64个方格构成,棋子放在方格里面。如果两个皇后棋子在同一行、同一列,或者在某个正方形的对角线上,那么这两个皇后就会互相攻击。请在棋盘上摆放8个皇后,使得它们都不会互相攻击。这是经典的8皇后问题。

现在要解决N皇后问题:将N个皇后摆放在一个N行N列的国际象棋棋盘上,要求任何两个皇后不能互相攻击。输入皇后数N(1<=N<=9),输出所有的摆法。无解输出"NO ANSWER"。行列号都从0开始算。

输入

一个整数N,表示要把N个皇后摆放在一个N行N列的国际象棋棋盘上
输出

所有的摆放放案。每个方案一行,依次是第0行皇后位置、第1行皇后位置...第N-1行皇后位置。

多种方案输出顺序如下:优先输出第0行皇后列号小的方案。如果两个方案第0行皇后列号一致,那么优先输出第1行皇后列号小的方案...以此类推

样例输入

python 复制代码
4

样例输出

python 复制代码
1 3 0 2 
2 0 3 1 

AC代码

python 复制代码
result = [0] * 12 	

def isOk(n,pos):	
    for i in range(n):
        if result[i] == pos or abs(i-n) == abs(result[i] - pos):
            return False
    return True
def queen(N,i):
                  
    if i == N: 
        for k in range(N):
            print(result[k], end=" ")
        print("")
        return True
    succeed = False
    for k in range(N):    
        if isOk(i,k):      
            result[i] = k  
            succeed = queen(N,i+1) or succeed   
    return succeed
N = int(input())
if not queen(N,0):
    print("NO ANSWER")
相关推荐
@zulnger2 分钟前
python 学习笔记(闭包)
笔记·python·学习
SHolmes18543 分钟前
Python all函数 判断是否同时满足多个条件
java·服务器·python
inksci3 分钟前
Python 中使用 SQL 连接池
服务器·数据库·python
子午7 分钟前
【2026原创】中草药识别系统实现~Python+深度学习+模型训练+人工智能
人工智能·python·深度学习
洛克大航海8 分钟前
Python 在系统 Windows 和 Ubuntu 中创建虚拟环境
windows·python·ubuntu·虚拟环境
ZEERO~9 分钟前
@dataclass的作用
开发语言·windows·python
南行*17 分钟前
C语言Linux环境编程
linux·c语言·开发语言·网络安全
Morwit19 分钟前
Qt qml创建c++类的单例对象
开发语言·c++·qt
几道之旅20 分钟前
pytdx能否下载期货数据呢?
python
古城小栈21 分钟前
Rust 已经自举,却仍需GNU与MSVC工具链的缘由
开发语言·rust