我是Python新手,我想做Dijkstra的算法,一开始我就遇到了问题
我有顶点和边的对象:
class Vertex:
minDistance = float('inf')
previousVertex = None
edges = []
id = None
name = None
def __init__(self, id, name):
self.id = id
self.name = name
class Edge:
source = None
target = None
weight = None
def __init__(self, source, target, weight):
self.source = source
self.target = target
self.weight = weight
我想取一个顶点,然后在它的属性边中添加从它开始的每一条边。对每个顶点执行以下操作:
vertices = []
def createGraph(self, vertices, edgesToVertices):
self.vertices = vertices[:]
for x in vertices:
for edge in edgesToVertices:
if edge.source is x.id:
x.edges.append(edge)
问题是,当我在最后一行附加边时,边将添加到列表中的所有顶点。 有人能解释一下我做错了什么以及为什么吗
在
Vertex
中定义的列表edges
是一个类变量。因此,如果您修改它,它会影响所有Vertex
实例(因此您所描述的行为)你能做的是:
这样,
edges
就属于每个实例顺便说一句,我猜你打算
createGraph()
成为Edge
的一部分。如果是这样的话,您可以像下面这样实现它:相关问题 更多 >
编程相关推荐