You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

N皇后Python代码仅n=1/5有效,其余无输出问题求助

N皇后问题代码运行异常分析

我编写了两款解决N皇后问题的Python代码,分别采用numpy数组和列表实现。测试0到20的整数后发现:

  • numpy数组版本仅当n=1或5时能输出正确结果,其余n值均输出“No Solution”
  • 列表实现版本仅支持n=1,n=5也无法输出结果

numpy数组实现代码

import numpy as np

def isSafe(arr, row, col, n):
    for ind in range(row):
        if(arr[ind][col] == 1):
            return False
    x = row
    y = col
    while x >= 0 and y >= 0:
        if arr[x][y] == 1:
            return False
        x -= 1
        y -= 1
    x = row
    y = col

    while x >= 0 and y < n:
        if arr[x][y] == 1:
            return False
        x -= 1
        y += 1
    
    return True

def nQueen(arr, row, n):
    if row >= n:
        return True
    for col in range(n):
        if isSafe(arr,row,col,n) == True:
            arr[row][col] = 1
            if nQueen(arr, row+1, n) == True:
                return True
    
    return False

def main():
    n = int(input("Enter the size of board: "))
    arr = np.zeros((n,n)).astype(int)
    if nQueen(arr, 0, n):
        for x in range(n):
            for y in range(n):
                print(arr[x][y], end='\t')
            print("\n")
    else:
        print("No Solution: ")

if __name__ == '__main__':
    main()

列表实现代码

import numpy as np

def isSafe(arr, row, col, n):
    for ind in range(row):
        if(arr[ind][col] == 1):
            return False
    x = row
    y = col
    while x >= 0 and y >= 0:
        if arr[x][y] == 1:
            return False
        x -= 1
        y -= 1
    x = row
    y = col

    while x >= 0 and y < n:
        if arr[x][y] == 1:
            return False
        x -= 1
        y += 1
    
    return True

def nQueen(arr, row, n):
    if row >= n:
        return True
    for col in range(n):
        if isSafe(arr,row,col,n) == True:
            arr[row][col] = 1
            if nQueen(arr, row+1, n) == True:
                return True
    
    return False

def main():
    n = int(input("Enter the size of board: "))
    arr = [[0]*n]*n
    if nQueen(arr, 0, n):
        for x in range(n):
            for y in range(n):
                print(arr[x][y], end='\t')
            print("\n")
    else:
        print("No Solution: ")

if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者CodingHatesU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:10:29