回溯法
来源:互联网 发布:上升三法选股公式源码 编辑:程序博客网 时间:2024/05/21 21:01
回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。
回溯法的基本行为是搜索,搜索过程使用剪枝函数来为了避免无效的搜索。剪枝函数包括两类:1. 使用约束函数,剪去不满足约束条件的路径;2.使用限界函数,剪去不能得到最优解的路径。(以上引他人的)
实现方法有两种:递归和递推(也称迭代)。
递归:程序调用自己的编程技巧叫做递归。
递推:递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法。比如使用while
迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,
而每一次迭代得到的结果会作为下一次迭代的初始值。
本例采用递归
【题目】请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。
例如
a b c e
s f c s
a d e e
矩阵中包含一条字符串”bccced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。(来源于剑指offer)
示例代码:
#include#include #include using namespace std;queue q,p;bool findcore(char *matrix,bool* vis,int row,int col,int r,int c,int posit,string str){ if(posit==str.size()) return true ; bool haspath=false; if(r>=0&&c>=0&&r
结果:
阅读全文
0 0
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- 回溯法
- js实现:仿京东搜索栏随滑动透明度渐变
- linux tar命令及相关压缩解压缩命令
- tp-link路由器Portal功能典型配置案例
- shell脚本入门篇---shell基础
- Android切词工具——BreakIterator(2)
- 回溯法
- java 8(一)--Lambda表达式
- 酒店OTT小区IPTV完整解决方案
- 'React/RCTBundleURLProvider.h’ file not found
- YUV转RGB(NV21-ARGB)的Neon优化代码
- iOS--UIWebView设置backgroundColor无效问题
- Python陷阱
- 南阳OJ 1204 魔法少女
- 移植FreeRTOS一定要修改startup_stm32f10x_hd.s的启动文件吗?