私は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)
問題があり、エッジは、リスト内のすべての頂点に追加されます。 誰かが私が間違っていることと理由を説明してもらえますか?
等号をテストするには '==' not 'is'を使用してください。 –
は 'class Edge:'の直下の3行を削除しますが、それがあなたの問題の原因だとは思っていません。デフォルトの属性を使用する場合は、 '__init__'のデフォルト引数として指定してください。 –
' Vertex'と同じです。問題は、すべての頂点が1つのリストを 'エッジ'で共有しているということだと思います。 –