有了graphp,有没有一种快速的方法来枚举两个节点之间的所有路径



使用Graphp(PHP库)有没有一种快速简单的方法来枚举两个节点之间所有唯一的、无循环的路径,或者我需要创建一个算法对象来实现这一点?

好吧,我尝试编写一个快速而肮脏的递归函数,而不是尝试实现graphp算法对象。。。我需要做一些测试,确保它以正确的格式吐出数据,而且效率非常低,但我希望能提供一些反馈,以更好地到达我想要的位置:

function Recursive_Find_Paths($GRAPH, $NODE, $DEST, $PATH = array(), $VISITED )
{
$PATHS = array();
array_push( $VISITED,$NODE->getId() ); // Add this node to the list of visited to prevent loops
if ( $NODE->getId() == $DEST->getId() ) { return array($PATH); } // SUCCESS! We found a path to the destination!
foreach ($NODE->getVerticesEdgeTo() as $NEXTNODE)
{
if ( in_array($NEXTNODE->getId(),$VISITED) ) { continue; }  // SKIP nodes if we have already visited them!
$NEXTPATH = $PATH;  $A = $NODE->getId(); $B = $NEXTNODE->getId();
$NEXTPATH["{$A}->{$B}"] = 0.9;
$MOREPATHS = Recursive_Find_Paths($GRAPH, $NEXTNODE, $DEST, $NEXTPATH, $VISITED);
if ( count($MOREPATHS) ) { $PATHS = array_merge($PATHS,$MOREPATHS); }
}
return $PATHS;  // Return the recursively calculated list of paths...
}

它正在返回我想要的东西(我选择了一个关联数组,这样我以后就可以粘贴一些关于路径每条支路的边缘细节信息)

假设一个简单的正方形有4个顶点1->2,1->3,2->4,3->4,我得到这个输出:

Array
(
[0] => Array
(
[1->2] => 0.9
[2->4] => 0.9
)
[1] => Array
(
[1->3] => 0.9
[3->4] => 0.9
)
)

所以我会继续玩代码,看看是否能想出更好的解决方案。谢谢

最新更新