【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")
相关推荐
共享家95271 天前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
疯狂的喵1 天前
C++编译期多态实现
开发语言·c++·算法
2301_765703141 天前
C++中的协程编程
开发语言·c++·算法
m0_748708051 天前
实时数据压缩库
开发语言·c++·算法
Hgfdsaqwr1 天前
Python在2024年的主要趋势与发展方向
jvm·数据库·python
lly2024061 天前
jQuery Mobile 表格
开发语言
一晌小贪欢1 天前
Python 测试利器:使用 pytest 高效编写和管理单元测试
python·单元测试·pytest·python3·python测试
小文数模1 天前
2026年美赛数学建模C题完整参考论文(含模型和代码)
python·数学建模·matlab
惊讶的猫1 天前
探究StringBuilder和StringBuffer的线程安全问题
java·开发语言
Halo_tjn1 天前
基于封装的专项 知识点
java·前端·python·算法