Ich habe hier einen funktionierenden ALgorithmus der Tiefensuche. Er arbeitet rekursiv und durchläuft einen Graphen (mit den selbsterklärenden Methodennamen - hoffe ich). Der Algorithmus findet nicht die optimale Lösung (Weg von Knoten start zu Knoten ziel) aber er findet zumindest eine Lösung.
Meine Frage lautet eher: Warum funktioniert das Ganze?
Delphi-Quellcode:
//-------- tiefensuche (public) ----------------------------------------
function TGraphAlgorithms.tiefensuche (graph: TGraph; start: TGraphNode; ziel: TGraphNode; weg: String) : String;
var l : TList;
begin
start.mark;
if start.getName = ziel.getName then
result := weg
else
begin
l := graph.getNeighbours(start);
l.toFirst;
while l.hasAccess do
begin
if NOT (l.getObject as TGraphNode).isMarked then
result := tiefensuche(graph, (l.getObject as TGraphNode), ziel, weg + (l.getObject as TGraphNode).getName);
l.next;
end;
end;
end;
Genauer gesagt: Was genau hat eine Methode für einen Wert, wenn result nicht gesetzt wird? Warum wird result (wenn einmal eine Lösung gefunden wurde) nicht immer wieder mit NIL oÄ überschrieben?