Я учусь использовать «доходность».Наш профессор попросил нас решить проблему N-Queens, используя «yield».Моя функция могла бы вырабатывать правильные решения, но я просто не знаю, как использовать «yield» для возврата этих решений.
Вот мой код (в котором 'board' - это одномерный список):
def n_queens_valid(board):
# to decide if a position is allowed
if len(board) != len(set(board)):
return False
for x in range(len(board)-1):
for y in range(x+1,len(board)):
if abs(y-x) == abs(board[x]-board[y]):
return False
return True
def n_queens_helper(n,board):
# to generate solutions
if len(board) == n:
print(board)
yield copy.deepcopy(board) ############
for queen in range(n):
board.append(queen)
if n_queens_valid(board):
n_queens_helper(n, board)
board.pop()
solutions = n_queens_helper(4,[])
list(solutions)
Если оператор yield удален, функция n_queens_helper(n,board)
сможет распечатать всерешения.Однако с заявлением о доходности окончательный результат будет []
.
Может ли кто-нибудь помочь мне с этой проблемой?
Дополнительная информация Я использую Python 3.6!А вот код, который может распечатать результаты:
def n_queens_valid(board):
if len(board) != len(set(board)):
return False
for x in range(len(board)-1):
for y in range(x+1,len(board)):
if abs(y-x) == abs(board[x]-board[y]):
return False
return True
def n_queens_helper(n,board):
if len(board) == n:
print(board)
for queen in range(n):
board.append(queen)
if n_queens_valid(board):
n_queens_helper(n, board)
board.pop()
n_queens_helper(7,[])