Я делаю версию N-Queens с графическим интерфейсом на Python. В настоящее время у меня есть плата, хранящаяся в списке 1D. Я знаю, что могу преобразовать одномерный список в двумерный, используя формулу вроде grid_2d[i][j] = grid_1d[i * NUM_COLUMNS + j]
, но я бы предпочел найти способ проверки недопустимых ходов, найдя взаимосвязь внутри одномерных индексов.
Я начал с функций, представленных ниже, но я думаю, что, вероятно, есть гораздо лучший способ сделать это, который мне не хватает. Кроме того, часть проверки диагоналей поставила меня в тупик.
Любые предложения по разумным способам проверки столкновений ферзей в представлении одномерного списка доски, пожалуйста?
def get_rows(board_size):
results = []
for i in range(board_size):
new_row = []
for j in range(board_size):
new_row.append(i * board_size + j)
results.append(new_row)
return results
def get_columns(board_size):
results = []
for j in range(board_size):
new_column = []
for i in range(board_size):
new_column.append(j + board_size * i)
results.append(new_column)
return results
print(get_rows(3)) # [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
print(get_columns(3)) # [[0, 3, 6], [1, 4, 7], [2, 5, 8]]