Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用回溯法改变n皇后问题_Python_Backtracking_N Queens - Fatal编程技术网

Python 用回溯法改变n皇后问题

Python 用回溯法改变n皇后问题,python,backtracking,n-queens,Python,Backtracking,N Queens,我有一个带有回溯功能的N queen程序(它生成所有可能的解决方案),我想对其进行更改,使其将queen放在每列的一半和每行的一半(列和行的数量为偶数)。例如,如果我有6列4行,那么每行放2个皇后,每列放3个皇后 输出示例: [[1 0 1 0 0 1] [0 1 0 1 1 0] [1 0 1 0 0 1] [0 1 0 1 1 0]] 问题是,当我运行脚本时,出现以下错误: IndexError: index 4 is out of bounds for axis 0 with si

我有一个带有回溯功能的N queen程序(它生成所有可能的解决方案),我想对其进行更改,使其将queen放在每列的一半和每行的一半(列和行的数量为偶数)。例如,如果我有6列4行,那么每行放2个皇后,每列放3个皇后

输出示例:

[[1 0 1 0 0 1]
 [0 1 0 1 1 0]
 [1 0 1 0 0 1]
 [0 1 0 1 1 0]]
问题是,当我运行脚本时,出现以下错误:

IndexError: index 4 is out of bounds for axis 0 with size 4
我不知道我做错了哪一部分。 这是我的密码:

k = 1
global N
t=4
N=t-1
w=(t-1)*2
def printSolution(board): 

    global k 
    print(k, "-\n") 
    k = k + 1
    for i in range(N*2): 
        for j in range(N*2): 
            print(board[i][j], end = " ") 
        print("\n") 
    print("\n") 

def isSafe(board, row, col) : 

    for i in range (row):
            for j in range(col): 
                if np.sum(board[i][j])>N: 
                    return False

    for j in range (col):
            for i in range(row): 
                if np.sum(board[i][j])> int(t/2): 
                    return False

    return True

def solveNQUtil(board,row, col) : 


    if col>=w and row<t:
            col=0
            row+=1
    if (col == w and row==t): 
            printSolution(board) 
            return True

    res = False
    for i in range(N): 
        if (isSafe(board, row, col)): 

            board[row][col] = 1; 


            res = solveNQUtil(board, row,col+1 ) or res; 

    return res 


def solveNQ() : 

    board = np.zeros((t,w)) 

    if (solveNQUtil(board, 0,0) == False): 

        print("Solution does not exist") 
        return
    return
solveNQ() 
k=1
全球N
t=4
N=t-1
w=(t-1)*2
def打印解决方案(电路板):
全局k
打印(k,“-\n”)
k=k+1
对于范围内的i(N*2):
对于范围(N*2)内的j:
打印(板[i][j],end=”“)
打印(“\n”)
打印(“\n”)
def isSafe(板、行、列):
对于范围内的i(行):
对于范围内的j(列):
如果np.sum(董事会[i][j])>N:
返回错误
对于范围内的j(列):
对于范围内的i(行):
如果np.sum(董事会[i][j])>int(t/2):
返回错误
返回真值
def solveNQUtil(板、行、列):

如果col>=w和row如果您点击了板上的最后一个元素,您将拥有
col=w
row=t-1
。因此,在
solvenquil
中,您将输入第一个块并设置
col=0
row=t
。然后,在下一次检查中,您没有
col==w
,但是
col=0
。因此,您继续并稍后尝试访问
board[row]
,这当然是不允许的

我猜你是否到达终点的测试应该是
solvenktil
中的第一个瘦测试,应该读像
如果col==w和row==t-1