免责声明:这是我目前正在从事的一个学期项目。我的问题是关于实施级别的细节,而不是评分方案的一部分。我编写这段代码只是为了测试我为我将要写的论文提出的理论。
另外,我已经考虑了这个问题的答案,但运气不佳,所以请不要将其视为该问题的重复
问题:
我有一个图表(G =(V,E))。在我的算法中的某个时刻,我需要通过将多个节点(例如 )“折叠”v_1, v_2, ..., v_n
成一个节点(例如)来将其转换为超图(在某种意义上v
)。在问题的上下文中,这意味着我需要更改边缘,以便更改任何和任何其他节点之间的E
边缘,使得现在介于和之间。e
v_1, v_2, v_n
u
V
e
u
v
为了捕捉到任何一对节点之间现在可能存在多个不同的边,我需要为每条边创建一个唯一标识符。我试图通过 ID 来做到这一点,但我目前无法正确实施。
这是我尝试过的:
class Edge:
_ID = 0
def __init__(self, u, v, w, c,f=0):
self.id = Edge._ID
Edge._ID += 1
self.src = u
self.dest = v
self.weight = w
self.capacity = c
self.flow = f
但是,当我尝试实例化新边缘时,出现以下错误:
>>> e = Edge(1,3,5,10,0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "UnsplittableFlow.py", line 14, in __init__
self.id = Edge._ID; Edge._ID += 1
UnboundLocalError: local variable '_ID' referenced before assignment
编辑:
通过一些答案的建议,我已经能够修复实例化时间错误。但是,另一个错误仍然存在。这是我的代码和错误:
class Edge:
_ID = 0
def __init__(self, u, v, w, c,f=0):
self.id = self._ID; self._ID += 1
self.src = u
self.dest = v
self.weight = w
self.capacity = c
self.flow = f
错误:
>>> e = Edge(1,3,5,10,0)
>>> e.id
0
>>> Edge._ID
0
>>> f = Edge(2,3,5,10,0)
>>> f.id
0
>>> Edge._ID
0
我会很感激任何帮助
谢谢