我有一个特别大的图,几乎不可能使用递归进行遍历,因为它使用了过多的内存。
下面是我的深度优先函数,使用递归:
public function find_all_paths($start, $path)
{
$path[] = $start;
if (count($path)==25) /* Only want a path of maximum 25 vertices*/ {
$this->stacks[] = $path;
return $path;
}
$paths = array();
for($i = 0; $i < count($this->graph[$start])-1; $i++) {
if (!in_array($this->graph[$start][$i], $path)) {
$paths[] = $this->find_all_paths($this->graph[$start][$i], $path);
}
}
return $paths;
}
我想重写这个函数,所以它是非递归的。我假设我需要制作某种队列,并使用array_shift()
函数的哪个部分弹出值,以及如何确保保留排队的顶点(以放置最终路径$this->stacks
)?