news 2026/5/1 5:07:48

算法杂谈:回溯路线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法杂谈:回溯路线

目录

前言

在动态规划中:

在bfs中:


前言

对于普通的路线问题,我们可以存储全局变量path存储路线过程中的,一个个“点”。由于这些点就是按照顺序存储的,路线就是可以直接得到的。

但是如果是动态规划,或者是带有图需要从一个点开始找到另一个点,我们在找到结果后还需要回溯这个结果的实现路线,这里没办法轻松得到路线,那么我们就需要尽可能利用条件,从该结果往回退找到上一个节点是什么,这里介绍两种目前已经遇到的情景。

在动态规划中:

以牛客网 最长公共子序列II 为例

最长公共子序列(二)_牛客题霸_牛客网

找到最长子序列,我们还需要返回这个子序列是什么,既然我们已经完成填表,那么我们就可以,以dp值为引,按照dp值递减的顺序,修改i和j的坐标,当s1[i]==s2[j]时此时这个就是我们要寻找的节点,头插进结果,让i--,j--(意味着继续道s1[0,i-1],s2[0,j-2]区间内寻找);如果不等,往可以使dp值减少的方向前进,于是我们就找到了路线。

代码实现如下:

class Solution { public: string LCS(string s1, string s2) { int n=s1.length(),m=s2.size(); s1=' '+s1,s2=' '+s2; vector<vector<int>> dp(n+1,vector<int>(m+1)); for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) { if(s1[i]==s2[j])dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } //回溯构造LCS string ret; int i=n,j=m; while(i&&j) { if(s1[i]==s2[j]) { ret=s1[i]+ret; --i; --j; } else if(dp[i-1][j]>dp[i][j-1])--i; else --j; } return ret==""?"-1":ret; } };

在bfs中:

以bjfuoj的 码码,我迷路了 为例

BJFUOJ | 码码,我迷路了

该题是一道很简单的bfs经典题,但找到目标点后,我们还需要输出从起点到目标点依次经过的路径,此时依旧利用回溯,构造路线。

回溯路线:因为我们需要从一个节点得到上一个节点的信息,这里节点的信息就是对应的坐标,那么我们可以创建一个“point”类型的二维数组fa,用fa[i][j]存储到达点{i,j}的上一个节点的坐标,具体代码体现就是在bfs中队列push新节点的时候,我们得到的节点假设是{newx,newy},因为newx和newy是由{x,y}得到的,我们使fa[newx][newy]={x,y}这样就得到了上一个节点的位置,就可以实现回溯了。

此篇完。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 14:11:26

Langchain-Chatchat离线问答系统的优势与应用场景解析

Langchain-Chatchat离线问答系统的优势与应用场景解析 在企业知识管理日益复杂的今天&#xff0c;一个常见的困境是&#xff1a;员工每天要花大量时间翻找内部文档——制度文件藏在共享盘深处&#xff0c;产品参数散落在十几份PDF中&#xff0c;项目经验只存在于老员工的记忆里…

作者头像 李华
网站建设 2026/4/29 12:23:06

基于LangChain的大模型本地部署方案——Langchain-Chatchat详解

基于LangChain的大模型本地部署方案——Langchain-Chatchat详解 在企业知识管理日益复杂的今天&#xff0c;一个常见的痛点浮现出来&#xff1a;员工每天花数小时查找内部制度、技术文档或合同条款&#xff0c;而这些信息明明就在公司的服务器里。更令人担忧的是&#xff0c;当…

作者头像 李华
网站建设 2026/4/21 0:32:11

Langchain-Chatchat如何处理编码乱码问题?多字符集兼容方案

Langchain-Chatchat 的多字符集兼容之道&#xff1a;如何根治编码乱码问题 在构建企业级本地知识库系统时&#xff0c;一个看似不起眼却频频“踩雷”的问题浮出水面——文本乱码。尤其是当用户上传一份来自十年前的简体中文说明书、一封港台同事发来的繁体邮件&#xff0c;或是…

作者头像 李华
网站建设 2026/4/23 9:34:11

Qt信号槽引用参数问题解析

Qt信号槽引用参数问题解析问题&#xff1a;qt c void slo_response(QByteArray data)槽函数正常&#xff0c;void slo_response(QByteArray& data)槽函数就收不到消息&#xff0c;信号和槽函数是同时修改的&#xff0c;就因为一个&就两种效果&#xff0c;是什么原因呢在…

作者头像 李华
网站建设 2026/4/28 9:21:21

Langchain-Chatchat问答系统混沌工程实验:验证系统鲁棒性

Langchain-Chatchat问答系统混沌工程实验&#xff1a;验证系统鲁棒性 在企业智能化转型的浪潮中&#xff0c;越来越多组织开始尝试将大型语言模型&#xff08;LLM&#xff09;应用于内部知识管理、智能客服和文档检索等场景。然而&#xff0c;一个现实问题始终悬而未决&#x…

作者头像 李华
网站建设 2026/4/16 17:26:44

守护数字世界的安全防线:软件测试从业者的责任与使命

在数字技术飞速发展的今天&#xff0c;软件已成为社会运转的核心引擎&#xff0c;从金融交易到医疗保健&#xff0c;再到日常通讯&#xff0c;软件无处不在。作为软件质量的守护者&#xff0c;软件测试从业者肩负着确保产品安全、稳定和可靠的重任。本文基于2025年12月19日的行…

作者头像 李华