图的最短路径都会写,那么最长路径呢?
最短路、path 和 walk在最短路径里我们通常想找从s 到t 的一条总代价最小的路线。如果所有边权非负Dijkstra 可以用贪心方式逐步确定当前最短的点如果存在负权边Dijkstra 的前提会坏掉但 Bellman-Ford 仍然可以通过多轮松弛处理。于是看上去最长路径也可以类似地定义从s 到t找一条边权总和最大的路线。最短路径的松弛是如果[][](,)d[v]d[u]w(u,v) 就更新那么最长路径似乎只要改成如果[][](,)d[v]d[u]w(u,v) 就更新。这个想法只在某些受限场景下成立。在图论里path 和 walk 是有区别的。walk 只要求相邻顶点之间有边可以重复经过顶点和边simple path 则不允许重复经过顶点。中文里都可能被叫作“路径”。日常说“从 A 到 B 的路径”通常不太区分是否允许重复经过同一个点。但图论和算法里这个区别非常关键。通常提到最短路径问题算法求解的是 walk即允许重复。从实现上看常见的最短路算法通常并不会在状态里记录“已经访问过哪些顶点”。Dijkstra 的状态是到每个点的当前最短距离Bellman-Ford 也是不断对边做松弛。它们并没有显式禁止一条候选路线重复经过某个点。最短路能转化成最长路吗在最短路径场景下如果是正权图那么 path 还是 walk 没有区别因为一定不会重复走边浪费权重。若有负数边但不成环那么 Bellman-Ford 仍可处理。但最短路径怕负权环在无向图里则是一条负边就够因为绕一圈代价更小可以一直降到任意低答案不存在反过来最长 walk 怕的是正权环因为绕一圈收益更大可以一直涨到∞∞。这和最短路径里的负权环是对称的。所以反过来看只要图里存在正环在无向图里则是有正边权并且允许重复行走那么最长 walk 就会变成无界问题。并不能简单的转化就行了。不过如果不存在会影响答案的正权环比如全图权重都是负数这时最长路就确实可以转化成最短路了。做法很简单。把每条边的权重()w(e) 变成−()−w(e)原图中的最长 walk 就对应新图中的最短 walk。原图里的正权环会变成新图里的负权环因此可以用 Bellman-Ford 的负权环检测逻辑处理。最长 simple path 是另一个问题那如果要求解的是最长简单路径呢从s 到t找一条不重复经过顶点的路径使得总权重最大。这个定义避免了正权环导致的无穷大。即使图里有正权环由于不能重复经过顶点也不可能无限绕圈。问题总是有有限答案。但这个问题要困难得多。最短路算法之所以能只维护[]d[v]是因为到达v 之后过去怎么来的通常可以被压缩成一个距离值。最长 simple path 不行。你到达v 时已经访问过哪些点会决定后面还能走哪些边。两个状态即使当前顶点相同只要访问集合不同后续空间也可能完全不同。如果把访问集合也放进状态可以做类似动态规划的搜索但状态数量通常是指数级的。这个问题可以和 Hamiltonian Path 规约。给定一个无权图如果它有n 个顶点那么它存在一条长度为−1n−1 的 simple path当且仅当它存在一条经过所有顶点一次的 Hamiltonian path。假如我们能高效求出一般图上的最长 simple path就能判断 Hamiltonian Path 是否存在。后者是 NP-complete 问题因此一般图上的最长 simple path 是 NP-hard 的。所以“最长路径可以取负变成最短路径”这句话只有在特定语义下成立。它不能拿来解决一般图上的最长简单路径。反过来我们还发现如果最短路也强制只能选 simple path那么有负环时它也不能做会变成困难问题。image总结最短路无负环则可用经典算法求解且求出的既是最短 path 也是最短 walk有负环则经典算法求出的 walk 不存在会任意小、path 存在但是求解困难最长路也一样但他不能处理的是正环特例DAG重要例外是 DAG也就是有向无环图。在 DAG 上没有环walk 和 simple path 的区别基本消失也不会出现通过绕正权环把答案刷到无穷大的情况。这时最长路径可以按拓扑序做动态规划。设[]dp[v] 表示从起点s 到v 的最长路径长度那么对每条边(,)(u,v) 做类似[]max⁡([],[](,))dp[v]max(dp[v],dp[u]w(u,v)) 的更新即可。因为拓扑序保证处理v 之前所有可能到达v 的前驱都已经处理过了。

相关新闻

C++入门第一课:从零搭建开发环境到Hello World实战

C++入门第一课:从零搭建开发环境到Hello World实战

1. 项目概述:为什么从C开始? 如果你点开这篇文章,大概率是刚接触编程,或者从其他语言(比如Python、Java)转过来,想啃下C这块“硬骨头”。我完全理解你的感受。十多年前,我坐在电脑前…

2026/10/9 8:56:31 阅读更多 →
基于MSP430与TrxEB的RF PER测试软件实战指南

基于MSP430与TrxEB的RF PER测试软件实战指南

1. 项目概述与核心价值在无线通信产品的研发和调试过程中,如何量化评估射频链路的可靠性,是每个工程师都会面临的硬核问题。你可能会用频谱仪看发射功率,用矢量网络分析仪测天线驻波比,但这些都无法直接告诉你:在实际的…

2026/10/8 21:53:31 阅读更多 →
Excel和系统管理数据哪个更好?企业数据管理方式如何选择?

Excel和系统管理数据哪个更好?企业数据管理方式如何选择?

在企业日常管理中,Excel几乎是使用频率最高的工具之一。 客户名单、销售统计、库存台账、采购计划、项目进度、财务报表,很多企业都习惯用Excel管理数据。它操作简单、上手快,对于初创企业或业务量较小的团队来说,确实能够解决不少…

2026/9/29 15:19:12 阅读更多 →

最新新闻

Selenium + Chromedriver 反爬破解:环境伪装与行为模拟实战

Selenium + Chromedriver 反爬破解:环境伪装与行为模拟实战

简介:这份PDF资料聚焦selenium配合chromedriver在爬虫实战中被目标站点识别并拦截的典型问题,面向已有一定Python爬虫基础、正遭遇反爬困扰的开发者。内容以爬取某夕夕商城为真实场景,记录了从正常刷取到突然跳转登录页的排查过程&#xff0c…

2026/10/9 8:56:23 阅读更多 →
同步发电机突然三相短路Simulink仿真建模全解析

同步发电机突然三相短路Simulink仿真建模全解析

同步发电机突然三相短路,是电力系统暂态分析里最经典也最让人头疼的课题之一。课本上推导短路电流表达式要铺好几页纸,什么次暂态、暂态、非周期分量、时间常数,符号堆得密密麻麻。但等你真正把这套理论落到Simulink仿真里就会发现&#xff0…

2026/10/9 8:56:23 阅读更多 →
互操作性:技术平台的语义地基与数据契约实践

互操作性:技术平台的语义地基与数据契约实践

1. 为什么“互操作性”不是技术选型的加分项,而是系统存亡的生死线“数据赋能(339)——技术平台——互操作性”这个标题乍看像一份内部编号文档,甚至有点枯燥。但我在某跨部门协同平台重构项目里,亲历过它从PPT里的一个…

2026/10/9 8:56:23 阅读更多 →
楼宇微网虚拟储能建模与Matlab优化调度实战

楼宇微网虚拟储能建模与Matlab优化调度实战

前一阵我帮某商业楼宇做能源管理方案,甲方开口就问:“你这套系统到底要不要加电池?加了电池多久能回本?”这个问题其实很能代表行业现状——光伏组件越来越便宜,但电池价格依然占大头,楼宇微网调度模型做得…

2026/10/9 8:56:23 阅读更多 →
接口测试实战指南:从HTTP协议到自动化与排错

接口测试实战指南:从HTTP协议到自动化与排错

做测试这些年,我印象最深的不是某个自动化平台用得多溜,而是项目上线前两小时那次紧急群聊。UI上怎么看都正常的订单功能,用户下单后状态死活对不上,反复点提交还能生成好几个一模一样的订单。UI测试全绿,接口层面却埋…

2026/10/9 8:56:23 阅读更多 →
从零跑通大模型应用全链路:模型选型、OCR、知识库与Agent框架实战

从零跑通大模型应用全链路:模型选型、OCR、知识库与Agent框架实战

大模型这两年从“新鲜玩意”变成了日常工具,但真正落到自己手里跑通一条完整链路的人其实没想象中多。我身边不少朋友的状态是:聊天窗口里用得挺溜,一到要接自己的数据、要批量处理文档、要搭一个能持续用的服务,就卡住了。这篇东…

2026/10/9 8:55:22 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →