图的最短路径都会写,那么最长路径呢?
最短路、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/7/19 4:31:52 阅读更多 →
基于MSP430与TrxEB的RF PER测试软件实战指南

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

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

2026/7/19 4:31:52 阅读更多 →
Excel和系统管理数据哪个更好?企业数据管理方式如何选择?

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

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

2026/7/19 4:31:52 阅读更多 →

最新新闻

WinUI 3.0开发实战:Fluent设计与性能优化指南

WinUI 3.0开发实战:Fluent设计与性能优化指南

1. Windows UI3.0 核心定位与技术架构WinUI 3.0是微软在2020年推出的新一代原生UI框架,作为Windows App SDK的核心组件,它彻底重构了Windows桌面应用的开发范式。与传统的Win32 API或WPF相比,WinUI 3.0最大的突破在于将操作系统级的设计语言与…

2026/7/19 7:16:50 阅读更多 →
Android构建变体配置与优化实战指南

Android构建变体配置与优化实战指南

1. 构建变体基础概念解析构建变体(Build Variant)是Android Gradle构建系统的核心概念之一,它代表了应用的不同构建版本。每个构建变体都是构建类型(Build Type)和产品风味(Product Flavor)的特…

2026/7/19 7:16:50 阅读更多 →
Unity Shader入门实战:从核心概念到可运行代码的完整指南

Unity Shader入门实战:从核心概念到可运行代码的完整指南

1. 项目概述:为什么Shader是Unity开发者的分水岭?如果你在Unity里做过一段时间开发,可能有过这样的经历:你费尽心思调好了模型、灯光和材质,但总觉得画面“差了点意思”,要么是塑料感太强,要么是…

2026/7/19 7:16:50 阅读更多 →
终极AMD Ryzen调试指南:免费开源SMUDebugTool完全教程

终极AMD Ryzen调试指南:免费开源SMUDebugTool完全教程

终极AMD Ryzen调试指南:免费开源SMUDebugTool完全教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

2026/7/19 7:16:50 阅读更多 →
ARM嵌入式系统NAND Flash性能优化:GPMC预取与写后置引擎详解

ARM嵌入式系统NAND Flash性能优化:GPMC预取与写后置引擎详解

1. 项目概述与核心挑战在嵌入式系统开发里,尤其是基于ARM Cortex-A这类应用处理器的项目中,外部存储器的性能往往是决定系统“快慢”的关键瓶颈。处理器主频动辄上GHz,但外部存储,特别是NAND Flash,其访问延迟却可能高…

2026/7/19 7:16:50 阅读更多 →
冬青先令绿篱工程苗采购指南:苗圃选择看哪些细节才放心

冬青先令绿篱工程苗采购指南:苗圃选择看哪些细节才放心

冬青先令,也常被称为先令冬青,是近几年庭院造景、商业景观、酒店门头绿化和售楼部景观中关注度较高的球形绿植。它的优势不只在“常绿”,更在于叶片细小密集、枝叶挺拔、自然成球、球形比例较稳定,适合做整齐、有秩序感的景观表达…

2026/7/19 7:15:49 阅读更多 →

日新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

月新闻