我有一个带有回溯功能的N皇后程序(它生成所有可能的解决方案),我想对其进行更改,以便将皇后区放在每一列的一半和每一行的一半(列数和行数)中甚至)。例如,如果我有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()
答案 0 :(得分:0)
如果您击中棋盘上的最后一个元素,您将拥有col = w
和row = t-1
。因此,在solveNQUtil
中,您将输入第一个块并设置col = 0
和row = t
。然后,在下一个检查中,您没有col == w
,而是col = 0
。因此,您继续操作,以后尝试访问board[row]
,这当然是超出范围的。
我猜您是否到达终点的测试应该是solveNQutil
中的第一瘦,并且应该读到类似if col == w and row == t - 1
的东西?