深度优先搜索
搜索这个东西看起来简单 但实际操作时,却异常复杂 复杂就复杂在算法的优化上 深搜基操——诶 展示下吧 if判断—>for循环枚举各个方向 ->对目标操作->递归->回溯 额 优化有两种 1°: 记忆化搜索: dp题数字三角形,其中一种方法是记忆化搜索: 需要开额外空间来存储 额 就是以空间换时间 这个题就不贴代码了 2°: 剪枝: 因为剪枝比较复杂,我就举个例子说说 ROADS(算法基础与在线实践&&洛谷): 剪枝有两种 一种是可行性剪枝 及早发现正在探索的路走不到终点 因而不再走下去,这种剪枝属于比较基础的 另一种是最优性剪枝 走到某节点时发现此时付出的代价已经超过前面记录的 故不在走下去 看起来都挺简单 其实确实不复杂 但最优性剪枝的分支—— 预见性最优性剪枝 处处最优剪枝 就比较复杂了 预见性:走到某节点确实不超过范围,但预见未来必定会超过范围 故不在走下去 处处最优:记下起点到目前每一个点最优路径的代价 篇幅有限,就举例处处最优 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<vector> 5 using namespace std; 6 struct road{ 7 int d; 8 int l; 9 int cost; 10 }; 11 vector<vector