所以我想写一个代码来做无环图的传递减少。所以元素是:
(3, 5), (5, 2), (2, 1), (4, 2), (3, 1), (4, 1)
这是我到目前为止所写的:
graph = [[3, 5],[5, 2],[2, 1],[4, 2],[3, 1],[4, 1]]
for i in range(len(graph)):
for j in range(len(graph)):
for k in range(len(graph)):
if [i,j] in graph and [j,k] in graph:
a = [i,k]
graph.pop(a)
print(graph)
运行后,我希望删除 (4,1) 后得到以下内容:
>> (3, 5), (5, 2), (2, 1), (4, 2), (3, 1)
但相反,它返回:
>> (3, 5), (5, 2), (2, 1), (4, 2), (3, 1), (4, 1)
我无法弄清楚我做错了什么。如果有人能指出错误,那就太好了!
PS:传递减少是删除图的冗余边。例如:
如果 ( A -> B ) 和 ( B -> C ),则 ( A -> C ),换句话说:如果 A 连接到 B 并且 B 连接到 C,那么 A 也连接到 C。并且在这种情况( A -> C )是多余的,因为 A 可以通过 B 到达 C 因此应该被删除。