我正在学习使用“收益”。我们的教授要求我们使用“收益率”解决N皇后问题。我的函数可以得出正确的解决方案,但是我只是不知道如何使用“ yield”返回这些解决方案。
这是我的代码(其中“木板”是一维列表):
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)
将能够打印所有解决方案。但是,使用yield语句,最终结果将是[]
。
有人可以帮助我解决这个问题吗?
其他信息 我正在使用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,[])