是否可以在PHP中使用级别中的数组实现IDDFS算法?
假设以下树:
A
/ \
B C
/ \ \
D E F
调用getNodes(A)
会产生数组(B,C),同样在数组(D,E)中产生getNodes(B)
。我已经编写了getNodes函数,将它与BFS算法一起使用,遗憾的是它太慢了。
代码格式化注释:
function bfs($start,$target){
$dist = 0;
if(empty($queue)){
$queue = array();
};
if(empty($checked)){
$checked = array();
};
array_push($queue, $start);
while(!empty($queue)):
$dist = $dist + 1;
$newqueue = array();
foreach($queue as $node){
if(!in_array($node,$checked)){
array_push($checked,$node);
$nodes=getNodes($node);
if(checkNode($nodes,$target)){
return $dist;
}else{
$newqueue=$nodes;
}
}
$queue = $newqueue;
}
endwhile;
return false;
}
答案 0 :(得分:0)
从递归的角度来看,执行此操作的函数可能如下所示:
<?php
function getNode($needle, $target) {
$res = null;
foreach($target as $key=>$val) {
if($key === $needle) {
$res = $target[$key];
break;
}
elseif(is_array($target[$key]))
$res = getNode($needle, $target[$key]);
}
return $res;
}
测试:
$arr = array(
'a' => array(
'b' => array(
'water'
),
'c' => array(
'earth'
)
)
);
var_dump(getNode('a', $arr));