首页 > 解决方案 > 为什么这个用于 N-queen 问题的 python 代码不起作用?

问题描述

我处理了所有检查对角线和列的情况,是否回溯仍然无法找到我的代码的问题..请帮助!!!

def canPlace(i,j,n):
    for r in range(0,i):
        if board[r][j]==1:
            return False
    #checking for left diagonal
    x=i
    y=j
    while x>=0 and y>=0:
        if board[x][y]==1:
            return False
        x-=1
        y-=1

    #checking for right diagonal
    x=i
    y=j

    while x>=0 and y<n:
        if board[x][y]==1:
            return False
        x-=1
        y+=1
    # if safe to place    
    return True


def solveNQ(i,n):
    #print("row=",i,board)
    if i==n:

        for i in range(0,n):
            for j in range(0,n):
                if board[i][j]==1:
                    print('Q',end=" ")
                else:
                    print('_ ',end=" ")
            print()
        return True

    for j in range(0,n):
        if canPlace(i,j,n):
            board[i][j]=1
            if solveNQ(i+1,n):
                return True
        board[i][j]=0
    return False

n=4
board=n*[n*[0]]
solveNQ(0,n)

canPlace() --检查是否可以安全保留queen(一种辅助函数) solveNQ()--main N-Queen 求解器方法

标签: pythonn-queens

解决方案


推荐阅读