算法设计与分析——回溯法算法模板
以深度优先方式系统搜索问题解的算法称为回溯法。在回溯法中,解空间树主要分为了四种子集树、排列树、n叉树和不确定树。
在《算法设计与分析课本》中介绍了11个回溯法的问题样例,这里根据解空间树的类型做一个分类。
子集树
装载问题
0-1背包问题
算法模板:
void backtrack(int t) { if(搜索到叶子结点) { return; } for(i=0; i<=1; i++) //01二叉树 { if(满足约束函数和限界函数)//剪枝 { backtrack(t+1); } } }
排列树
旅行售货员问题
圆排列问题
电路板排列问题
算法模板:
void backtrack(int t) { if(搜索到叶子结点) { return; } for(i=0; i<=n; i++) { if(满足约束函数和限界函数)//剪枝 { swap(x[t],x[i]); backtrack(t+1); swap(x[t],x[i]); } } }
n叉树
图的m着色问题
算法模板:
void backtrack(int t) { if(搜索到叶子结点) { return; } for(i=1; i<=n; i++) //n叉树 { x[t]=i;//例如n后问题中,记录第t后所在的第i列 if(满足约束函数和限界函数)//剪枝 { backtrack(t+1); } } }
不确定树
连续邮资问题
算法模板:
void backtrack(int t) { if(搜索到叶子结点) { return; } for(i=x; i<=y; i++) //x与y由相应的函数得到 { x[t]=i; if(满足约束函数和限界函数)//剪枝 { backtrack(t+1); } } }
本文作者:王陸
本文链接:https://www.cnblogs.com/wkfvawl/p/12013129.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步