我在一个未维护的旧网页上找到了算法X的python实现。它工作得很漂亮。该代码非常简洁,没有注释。有一件我不掌握的东西。我知道它有效,但是我不知道如何或为什么。希望python程序员比我自己更高级可以提供帮助。
在下面的代码中,“选择”被调用,但是返回值发生了什么。此外,“选择”是否会更改X中的值(即X.pop(j))?是不是“选择”被传递了X的副本?
这段代码:
X, Y = exact_cover(X, Y)
for i, row in enumerate(grid):
for j, n in enumerate(row):
if n:
select(X, Y, (i, j, n))
for solution in solve(X, Y, []):
for (r, c, n) in solution:
grid[r][c] = n
yield grid
调用此函数:
def select(X, Y, r):
cols = []
for j in Y[r]:
for i in X[j]:
for k in Y[i]:
if k != j:
X[k].remove(i)
cols.append(X.pop(j))
return cols
车手:Ali Alisaf