【发布时间】:2018-08-26 08:06:16
【问题描述】:
假设我们有一个数组,其中包含许多定义特定节点路径的数组。例如:
X1 X3 X5
| | |
A -- B -- C -- D
| | |
X2 X4 X6
还有代码:
$array = [
'A' => ['B','X1','X2'],
'B' => ['C','X3','X4'],
'C' => ['D','X5','X6'],
];
用最多 2 个节点找到从一个点到另一个点的路径的最佳方法是什么?例如,要从 A 到 D,您需要从 A 到 B 到 C 再到 D。
现在我已经编写了一个执行此搜索的函数,但我确信有更好的方法来执行此搜索(可能是递归的)。
private function findpath($array, $start, $end)
{
$result = array();
foreach ($array[$start] as $key1 => $value1) {
foreach ($array[$value1] as $key2 => $value2) {
if (in_array($end, $array[$value2])) {
return $result = [$start, $value1, $value2, $end];
}
}
}
}
findpath($array, 'A', 'D');
// returns
// array:4 [
// 0 => "A"
// 1 => "B"
// 2 => "C"
// 3 => "D"
// ]
【问题讨论】: