回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
回溯法指导思想——走不通,就掉头。设计过程:确定问题的解空间;确定结点的扩展规则;搜索。
立即学习“PHP免费学习笔记(深入)”;
这里主要展示怎么用php实现该问题
$tres代表一次可行的尝试
$res 记录总结果
详细数据结构分析 可以参考链接。
<!--?php
//check is valid now
function check($l,$c){
global $tres;
global $res;
global $n,$count;
foreach($tres as $key=-->$value){
if($key<$l){
if($value==$c){
return 0;
}else if(abs($l-$key)==abs($c-$value)){
return 0;
}
}
}
return 1;
}
function scan($line){
global $tres;
global $res;
global $n,$count;
if($line==$n){
$res[]=$tres;
// $tres=array();
$count++;
}else{
for($i=0;$i<$n;$i++){
if(check($line,$i)==1){
$tres[$line]=$i;
$nxline=$line+1;
scan($nxline);
}
}
}
}
$tres=array();
$res=array();
$n=8;$count=0;
$stime=microtime();
scan(0);
$etime=microtime();
var_dump($res);
echo there is $count ways !
;
$t=$etime-$stime;
echo (int)$t.seconds used.;
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号