news 2026/6/21 18:47:05

算法杂谈:回溯路线

作者头像

张小明

前端开发工程师

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/6/14 11:36:08

高效安全的私有文档问答系统:Langchain-Chatchat深度解析

高效安全的私有文档问答系统&#xff1a;Langchain-Chatchat深度解析 在企业知识管理日益复杂的今天&#xff0c;一个常见的痛点浮出水面&#xff1a;技术手册、合同模板、内部制度等关键文档散落在各个角落&#xff0c;员工查找信息耗时费力&#xff0c;而一旦依赖公有云AI服…

作者头像 李华
网站建设 2026/6/21 13:10:18

对话百胜软件数据产品专家文斌丨数据炼油厂与AI超级顾问:DATAMAX如何让零售数据“活”起来

百闻不如一践&#xff0c;【百胜智见】为您解码百胜零售数智实践~本期导读&#xff1a;在数据爆炸的时代&#xff0c;零售企业坐拥“数据金山”却常常陷入“数据贫困”的困境。如何将分散、沉睡的数据转化为驱动业务增长的“活水”&#xff1f;百胜软件DATAMAX数据中台给出了智…

作者头像 李华
网站建设 2026/6/19 10:08:08

Quake 方言

Quake 方言总体介绍量子电路模型是应用最广泛的量子计算模型。它为表述量子算法提供了便利工具&#xff0c;也为量子计算机的物理构建提供了架构。量子电路将计算表示为一个应用于量子数据的量子算子序列。在我们的场景中&#xff0c;量子数据是一组量子比特。物理上&#xff0…

作者头像 李华
网站建设 2026/6/16 16:33:18

分割链表(dummy的用法)

思路很简单&#xff0c;将小于x的插入到small链表中&#xff0c;大于等于x的插入到large链表&#xff0c;最后将small插到large前面&#xff0c;返回small的头节点。但是插入的步骤很繁琐&#xff0c;需要设置头节点&#xff0c;甚至尾结点&#xff0c;在这里我们使用哨兵头节点…

作者头像 李华
网站建设 2026/6/21 12:55:02

8个AI论文工具,MBA毕业论文高效写作推荐!

8个AI论文工具&#xff0c;MBA毕业论文高效写作推荐&#xff01; AI 工具助力论文写作&#xff0c;高效又省心 在当前的学术环境中&#xff0c;MBA 学生面临着日益繁重的论文写作任务。从选题到开题、从撰写到降重&#xff0c;每一个环节都需要大量的时间和精力。而 AI 技术的兴…

作者头像 李华
网站建设 2026/6/19 0:29:13

Claude code免费体验+安装方式,对接国产大模型,Node + 配置教程

今天继续给大家介绍AI编程的环境搭建&#xff0c;使用IDE加上一个单独的client agent的这个模式。 在所有的这个agent里面&#xff0c;最好用的就是这个claude code。 Claude Code&#xff08;简称CC&#xff09;是目前最受欢迎的独立CLI工具之一&#xff0c;但由于账号申请和…

作者头像 李华