回溯return

回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法

递归回溯算法框架:

/*

都是在for下的if下的 
保存结果,找下一步,回溯,这三个是一起的
还有一个到达目的地输出解放在外面就好 

三个数组:
原数据数组
标记数组
储存结果数组


*/ 
/*
框架一 
*/ 
int search(int k){
    for(int i=1;i<=算法总数;i++){
        if(满足条件){
            保存结果
            if(到目的地) 输出解;
            else search(k+1);
            恢复:保存结果之前的状态(回溯一步) 
        }
    }
} 
/*
框架二 
*/ 
int search(int k){
    if(到目的地) 输出解;
    else 
        for(int i=1;i<=算法总数;i++){
            if(满足条件){
                保存结果
                search(k+1);
                恢复:保存结果之前的状态(回溯一步) 
            }
    }
}

return只返回当前调用它的函数

return只不过相当于提前走到了函数的结束标志‘}’这,因为走到函数的结束标志‘}’时,也是返回到上一层函数

return只是把return和函数的结束标志‘}’中间的语句给忽略了

上面的分支单层return或者打印结果,对后面出现的分支没有影响

所以在最后面层的return是绝对不会影响到其他函数的计算结果和输出结果的

在以后每次输出结果的时候做一个判断,就能控制结果的输出了

抽象为图形化思维

像回溯的树形结构

像DP的表型结构

猜你喜欢

转载自blog.csdn.net/qq_40828914/article/details/80676784
今日推荐