回溯法

作者: lifefruity | 来源:发表于2021-01-18 23:06 被阅读0次

回溯法就是类似穷举,类似下面的3个for循环,他们的结果是一样的。这个例子中可能结果出现111,122这样重复的,需要优化,其实只要在 let =able[$i] 的后面插入以下就行

if(in_array($let, $selected)){
    continue;
}
<?php
//利用回溯法,写出1,2,3组成的全排列


//就是穷举的例子
function func($selected, $able){
    if(count($selected) == 3){
        echo implode('', $selected)."\n";
        return;
    }
    
    for($i = 0; $i < count($able); $i++){
        //step 1. 可选解【放入】到已选集合中
        $let = $able[$i];
        $selected[] = $let;


        //step 2. 进入下一个阶段
        func($selected, $able);
        
        //这里其实应该说是满足selected为3后,进行依次回溯
        
        //var_dump($selected);exit;//这一句一打就知道了,111,112,113,一轮for完成了,然后最后的去除,再121,122,123开始,类似先进后出
        //step 3. "回溯"换个解再遍历(已选解集合中【删除】可选解)
        array_pop($selected);
        
        
    }
    
}

func([], [1,2,3]);

/*
$arr = [1,2,3];
for($i = 0 ; $i < count($arr); $i++){
    for($j = 0 ; $j < count($arr); $j++){
        for($k = 0 ; $k < count($arr); $k++){
            //echo $arr[$i].$arr[$j].$arr[$k]."\n";
        }
    }
}
*/

相关文章

  • N皇后

    回溯法核心代码: n皇后问题回溯法

  • 简单的谈谈dfs

    简单的说回溯法,递归就是将函数负责几遍。那么回溯法就是将for循环复制几遍。回溯法框架 为什么要把list的最后一...

  • 算法08-回溯法:面试最常见问题

    算法08-回溯法:面试最常见问题 一、介绍 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜...

  • 回溯法与分支限界法

    回溯法与分支限界法 时间 2016-03-24 标签 搜索 回溯法 1、概念 回溯算法实际上一个类似枚举的搜索尝...

  • LeetCode之回溯算法

    回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。因为回溯的本质是穷举,穷...

  • 小朋友学经典算法(14):回溯法和八皇后问题

    一、回溯法 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步...

  • 算法的设计思想2

    4,回溯法 回溯法是一种优化的穷举法。所谓穷举法就是穷举问题的所有可能性,直到发现解决问题的最佳解为止。回溯法会有...

  • 算法理论 | 回溯法

    回溯法 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并...

  • 78. Subsets

    经典的回溯法

  • 491. Increasing Subsequences

    典型的回溯法

网友评论

      本文标题:回溯法

      本文链接:https://www.haomeiwen.com/subject/xbufzktx.html