Python 用回溯法改变n皇后问题
我有一个带有回溯功能的N queen程序(它生成所有可能的解决方案),我想对其进行更改,使其将queen放在每列的一半和每行的一半(列和行的数量为偶数)。例如,如果我有6列4行,那么每行放2个皇后,每列放3个皇后 输出示例: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
[[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