【发布时间】:2020-03-02 12:28:05
【问题描述】:
我正在通过编程访谈元素,递归章节中的 n-queen 问题的这个非常巧妙的解决方案,但似乎无法理解特定的一段代码。如果有人可以在这里解释逻辑,那将非常有帮助。如果检查冲突的条件是我试图在这里绕开我的头,但没有成功。
def n_queens(n: int) -> List[List[int]]:
def solve_n_queens(row):
if row == n:
# All queens are legally placed.
result.append(col_placement.copy())
return
for col in range(n):
# Test if a newly place queen will conflict any earlier queens place before
# I am struggling to make sense of this if condition
if all(abs(c - col) not in (0, row - i)
for i, c in enumerate(col_placement[:row])):
col_placement[row] = col
solve_n_queens(row + 1)
result: List[List[int]] = []
col_placement = [0] * n
solve_n_queens(0)
return result
【问题讨论】:
-
你从哪里得到这个代码?如果不是您自己的,请务必注明来源
-
我从一本书里得到的。
-
请注明作者姓名、书名、章节和页码。
-
这真的会帮助您理解代码还是堆栈溢出规则?真的很好奇!!
-
这段代码取自 Elements of Programming Interviews,章节是动态编程。我不知道 Stack Overflow 的人有什么问题,他们一直担心学生在作业上获得帮助。如果我在做作业时得到帮助,我很可能会寻找编码解决方案而不是解释。
标签: python-3.x recursion backtracking n-queens