免责声明:这是我目前正在进行的一个学期项目.我的问题是关于实施级别的细节,而不是评分方案的一部分.我只是编写这段代码,以此来测试我将为我将要撰写的论文提出的理论.
此外,我已经考虑了this question的答案,运气不佳,所以请不要将此视为该问题的副本
问题:
我有一个图表(G =(V,E)).在我的算法中的某些时刻,我需要通过将多个节点(例如,v_1,v_2,…,v_n)“折叠”到一个节点(例如,v)中将其转换为超图(在某种意义上).在问题的上下文中,这意味着我需要改变E中的边缘,使得v_1,v_2,v_n中的任何一个与V中的任何其他节点u之间的任何边缘e将被改变,使得e现在在u和v之间. .
为了捕获任何节点对之间现在可能存在多个不同的边,我需要为每个边创建一个唯一的标识符.我试图通过ID和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 "", line 1, in
File "UnsplittableFlow.py", line 14, in __init__
self.id = Edge._ID;