【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")
相关推荐
binishuaio2 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE4 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻8 分钟前
WPF中的依赖属性
开发语言·wpf
洋24017 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙18 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点19 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
NoneCoder36 分钟前
Java企业级开发系列(1)
java·开发语言·spring·团队开发·开发
苏三有春37 分钟前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt
一只爱好编程的程序猿39 分钟前
Java后台生成指定路径下创建指定名称的文件
java·python·数据下载
Aniay_ivy44 分钟前
深入探索 Java 8 Stream 流:高效操作与应用场景
java·开发语言·python