回溯法的两种框架:递归回溯与迭代回溯

递归回溯:

private static void backtrack(int t){
    if t>=n then                          //递归深度t大于等于最大层次n,输出解向量x
        output(x)
    for j<-f(n,t) to g(n,t) do            //f(n,t)为子树的起始编号,g(n,t)为子树的终止编号
        x[t]<-value(i)                    //将当前拓展节点x[t]赋上所选子树的值
        if constraint(t)&&bound(t) then   //constraint(t)约束函数、bound(t)界函数
            backtrack(t+1)
}

迭代回溯:

void iterativeBacktrack ()
{
	t=1;
	while t>0 then
		if f(n,t)<=g(n,t) then                //当前是否还有节点可选
		    for i<-f(n,t) to g(n,t) do        //遍历所有节点
                x[t]<-value(i)
				if constraint(t)&&bound(t) then
					if solution(t) then
                        output(x)
					else
                        t++
		else
            t--
}

posted @   东东咚咚东  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示