PHP - 查找数组中的所有路径(2 边)
PHP - Find all paths within array (2 sides)
我在 php 中有一个巨大的数组(~800 个子数组):
$arrayx = array(
[0] => array("side1" => "XTSWS", "side2" => "WRXXC", "value" => "150"),
[1] => array("side1" => "WRXXC", "side2" => "TXXBD", "value" => "110"),
[2] => array("side1" => "XTSWS", "side2" => "GVFDS", "value" => "40"),
[3] => array("side1" => "XTSWS", "side2" => "ABNMDA", "value" => "1350"),
[4] => array("side1" => "TTTSY", "side2" => "WRXXC", "value" => "1150"),
[5] => array("side1" => "WDWDD", "side2" => "KGADSD", "value" => "10050"),
[6] => array("side1" => "ZZSJH", "side2" => "PPPEIJD", "value" => "1750"),
... 800
);
对于双方,我试图找到从一个值到另一个值的所有可能路径,例如:
XTSWS -> WRXXC
XTSWS -> TXXBD -> WRXXC
XTSWS -> TXXBD -> ZZSJH -> WRXXC
在 PHP 中有什么有效的方法可以做到这一点吗?我在 Python 等中找到了一些使用 graph/nodes 的示例。
$values = $this->findAllPaths("XTSWS", "WRXXC");
function findAllPaths($from, $to)
{
}
您将需要在 PHP 中实施回溯,请参阅 https://www.geeksforgeeks.org/backtracking-algorithms/
因为你有 800 个元素,明智的做法是使用 stack on your own instead of relying on recursivity. You will need to somehow "color" 在任何当前位置已经遍历的项目,并在回溯时取消着色,这样你就可以避免循环。
这永远不会很有效,因为你在回溯,它具有指数级的复杂性,你没有任何不同的选择,因为你需要找到所有路径。
我在 php 中有一个巨大的数组(~800 个子数组):
$arrayx = array(
[0] => array("side1" => "XTSWS", "side2" => "WRXXC", "value" => "150"),
[1] => array("side1" => "WRXXC", "side2" => "TXXBD", "value" => "110"),
[2] => array("side1" => "XTSWS", "side2" => "GVFDS", "value" => "40"),
[3] => array("side1" => "XTSWS", "side2" => "ABNMDA", "value" => "1350"),
[4] => array("side1" => "TTTSY", "side2" => "WRXXC", "value" => "1150"),
[5] => array("side1" => "WDWDD", "side2" => "KGADSD", "value" => "10050"),
[6] => array("side1" => "ZZSJH", "side2" => "PPPEIJD", "value" => "1750"),
... 800
);
对于双方,我试图找到从一个值到另一个值的所有可能路径,例如:
XTSWS -> WRXXC
XTSWS -> TXXBD -> WRXXC
XTSWS -> TXXBD -> ZZSJH -> WRXXC
在 PHP 中有什么有效的方法可以做到这一点吗?我在 Python 等中找到了一些使用 graph/nodes 的示例。
$values = $this->findAllPaths("XTSWS", "WRXXC");
function findAllPaths($from, $to)
{
}
您将需要在 PHP 中实施回溯,请参阅 https://www.geeksforgeeks.org/backtracking-algorithms/
因为你有 800 个元素,明智的做法是使用 stack on your own instead of relying on recursivity. You will need to somehow "color" 在任何当前位置已经遍历的项目,并在回溯时取消着色,这样你就可以避免循环。
这永远不会很有效,因为你在回溯,它具有指数级的复杂性,你没有任何不同的选择,因为你需要找到所有路径。