You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带权有向彩色图最短路径求解咨询:需含红、蓝、绿节点

带颜色约束的最短路径问题解答

你的思路方向是对的——状态扩展是解决这类带路径约束最短路径问题的标准方法,但4种状态不足以覆盖需求,得调整状态定义:

核心问题:需要跟踪已收集的目标颜色集合

我们的约束是路径必须包含红(R)、蓝(B)、绿(G)三种颜色节点,因此需要跟踪当前路径已经集齐了这三种颜色中的哪些。所有可能的状态是这三种颜色的子集,共8种:

  • ∅:未收集任何目标颜色
  • {R}:仅收集到红色
  • {B}:仅收集到蓝色
  • {G}:仅收集到绿色
  • {R,B}:收集到红+蓝
  • {R,G}:收集到红+绿
  • {B,G}:收集到蓝+绿
  • {R,B,G}:集齐所有目标颜色(终点t必须处于这个状态)

扩展图的构建规则

将原图每个节点u,扩展为8个状态节点,记为(u, S),其中S是上述颜色子集。然后按以下规则添加边:

  • 对原图中u到v的边(权值为w):
    1. 若v的颜色是黄色(非目标颜色):从(u, S)到(v, S)连一条权值为w的边——黄色节点不改变已收集的颜色集合。
    2. 若v的颜色是R/B/G中的一种:计算新集合S' = S ∪ {v的颜色},从(u, S)到(v, S')连一条权值为w的边。

求解方式

  1. 确定起点状态:若起点s是目标颜色(如红),则起点为(s, {R});若s是黄色,则起点为(s, ∅)。
  2. 使用Dijkstra算法求解从起点到(t, {R,B,G})的最短路径即可。因为原图是正权图,扩展后的图也保持正权,Dijkstra算法完全适用,复杂度为O(M log N)(N为原图节点数,M为原图边数,扩展后节点数8N、边数最多8M,复杂度仍可控)。

为什么4种状态不够?

你之前的4种状态应该是对应单个颜色,但这种方式无法同时跟踪多种颜色的收集情况——比如无法区分「已集齐红+蓝」和「仅收集到红」这两种状态,而这两种状态后续经过不同节点时,对达成最终约束的影响完全不同,因此必须用颜色子集作为状态维度。

内容的提问来源于stack exchange,提问作者Christine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:25:03