我在一个未维护的旧网页上找到了算法X的python实现。它工作得很漂亮。该代码非常简洁,没有注释。我没有抓住一件。我知道它有效,但是我不知道如何或为什么。希望python程序员比我自己更先进。
在下面的代码中,“ select”被调用,但是返回值发生了什么。此外,“选择”是否会更改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,[]):
for (r,c,n) in solution:
grid[r][c] = n
yield grid
调用此函数:
def select(X,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
来源:https://www.cs.mcgill.ca/~aassaf9/python/algorithm_x.html
Autor:Ali Assaf