Ich versuche, Dijkstras Algorithm in Python zu implementieren. Ich möchte Länge von Knoten "You" zu allen anderen Knoten wissen.Seltsames Verhalten von Dijkstras Algorithm in Python
def Dijkstr():
listOfProcessingNodes = listOfNodes
for i in listOfNodes:
if i.name == "You":
i.lastNode = None
i.length = 0
i.resolved = True
lastProcessNode = i
listOfProcessingNodes.sort(key=lambda x: x.length, reverse=True)
while len(listOfProcessingNodes):
processNode = listOfProcessingNodes.pop()
for i in processNode.adjencyList:
for k in listOfEdges:
if (k.inNode == i.name and k.outNode == processNode.name and i.resolved == False) or (k.inNode == processNode.name and k.outNode == i.name and i.resolved == False):
i.length = processNode.length + int(float(k.cost))
i.lastNode = processNode
i.resolved = True
listOfProcessingNodes.sort(key=lambda x: x.length, reverse=True)
lastProcessNode = processNode
print processNode.name,":", processNode.length
Hier Definition von Klassen Node und Edge-:
class Node():
def __init__(self, name):
self.name=name
self.adjencyList=[]
self.resolved = False
self.lastNode = None
self.length = float("inf")
class Edge():
def __init__(self, inNode, outNode, cost):
self.inNode=inNode
self.outNode=outNode
self.cost=cost
für meine Eingabe
You - A: 3
You - B: 2
A - C: 4
A - D: 4
B - D: 1
B - E: 2
C - F: 1
D - F: 2
D - G: 4
E - G: 2
F - G: 2
ich diese Ausgabe erhalten
You : 0
B : 2
A : 3
D : 3
E : 4
F : 5
C : 7
G : 7
Statt
You : 0
B : 2
A : 3
D : 3
E : 4
F : 5
C : 6
G : 6
Ich bin wirklich verwirrt, wenn es nicht für alle Knoten funktioniert, so mache ich eine Fehlentscheidung, aber wenn es nicht für die letzten 2 Knoten funktioniert? Danke für Ihre Hilfe
Ich fürchte, es wird schwierig für uns, Ihnen zu helfen, da Ihr Code nicht vollständig ist. Bearbeiten Sie Ihren Code, um die Definition Ihrer Knoten- und Edge-Klassen aufzunehmen, und fügen Sie den Code hinzu, der zum Erstellen Ihrer Beispieleingabe verwendet wurde. –
Hallo, Ich habe die Definition von Klassen hinzugefügt, aber der Code zum Erstellen von Eingaben ist wirklich kompliziert, aber ich bin mir sicher, dass es gut funktioniert. – user1928543
Wo und wie ist 'listOfNodes' definiert? Es sollte wahrscheinlich ein Funktionsargument sein. – tripleee