Einzelnen Beitrag anzeigen

wunderkinnd

Registriert seit: 10. Sep 2012
3 Beiträge
 
Delphi 2005 Personal
 
#1

result nicht gesetzt (rekursive Tiefensuche)

  Alt 10. Sep 2012, 14:58
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?
  Mit Zitat antworten Zitat