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;