У меня есть массив, представляющий соединения между узлами.
Учитывая определенный конечный узел, я хотел бы вернуть подмножество узлов, которые ведут к этому конечному узлу.
Например, еслиМои определения узлов: "ab", "ac", "ce", "ef", "ek", "kz", "qz", "xq" "km", "ct", которые представляют следующее:
, и я хотел бы видеть пути, ведущие к 'z', которые:
У меня есть PHP-код:
<?php
$end = "z";
$items = array("a-b", "a-c", "c-e", "e-f", "e-k", "k-z", "q-z", "x-q", "k-m", "c-t");
$graph = getPre($items, $end);
print_r($graph); // This is what I want to populate
exit();
function getPre($array, $char) {
$predecessors = array_filter($array, function($line) use($char) {
return strpos(substr($line, 2, 1), $char) === FALSE ? FALSE : TRUE;
}
);
if (count($predecessors) == 0) {
return;
} else {
print_r($predecessors)."<br>";
echo "<br>";
foreach ($predecessors as $pre) {getPre($array, substr($pre, 0,1));}
}
}
?>
который выводит:
Array ( [5] => k-z [6] => q-z )
Array ( [4] => e-k )
Array ( [2] => c-e )
Array ( [1] => a-c )
Array ( [7] => x-q )
который по крайней мере является правильным списком узлов, так что я почти на месте.
Вопрос : Как у меня естьрезультаты возвращены в мой массив $graph
?
Где-то мне нужно return $predecessors;
и объединить его с предыдущими результатами. Я также хочу добавить функциональность, чтобы можно было указывать начальный узел, но я думаю, что это будет просто дополнительный тест в моем рекурсивном конечном тесте.