Michael Keller: traversieren eines Graphes => Rekursion&OOP

Beitrag lesen

hab das Ganze auf ein übersichtlicheres Problem gekürzt:

dies sollte 5,6,11 ausgeben... das $testn2->visited bleibt aber false (0) obwohl die Ausgabe für die zweite Node (6) gemacht wird und folglich auch $this->visited=true; für Node 6 aufgerufen wird...

class Node {
var $visited;
var $edges;
var $name;

function Node($name) {
  $this->name = $name;
}

function addEdge($addEdge) {
  $this->edges[]=$addEdge;
}

function depthFirst() {
  if ($this->visited) {
   echo "halt";
   return;
  }
  echo $this->name.",";
  $this->visited=true;
  for ($i=0; $i<count($this->edges); $i++) {
   $edge = $this->edges[$i];
   $edge->to->depthFirst();
  }
}
}

class Edge {
var $weight;
var $to;
function Edge($weight, $to) {
  $this->weight = $weight;
  $this->to= $to;
}
}

$testn = new Node("5");
$testn2 = new Node("6");
$tedge = new Edge(1,$testn2);
$testn->edges[]=$tedge;
echo $testn->depthFirst();
echo $testn->visited;
echo $testn2->visited;