У меня есть программа N 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()