具有所需顶点的有向加权图

Posted

技术标签:

【中文标题】具有所需顶点的有向加权图【英文标题】:Directed Weighted Graph with required vertices 【发布时间】:2020-07-28 20:23:46 【问题描述】:

给定:一个有向加权图 G=(V, E),一些顶点是红色的,一些是蓝色的,其余的是白色的,权重 Ti 是允许从任何红色顶点到任何顶点的最大权重蓝色顶点。

问题:创建一个算法,找到从源节点 S 到目标节点 T 的路径,该路径具有最小的权重,并且在到达顶点 T 之前,该路径在某个点从红色顶点到蓝色顶点的权重最多为 Ti。该算法应该有时间复杂度 O(n^3)

评论:我不知道如何开始,我认为这是 Dijkstra 算法的一些变体,我看到一些人谈论制作图表副本并连接副本,但除此之外,我不确定该算法的设置是什么样的。任何帮助将不胜感激。

【问题讨论】:

在发布之前,总结问题并提供详细信息和示例来描述您尝试过的内容。 如果存在从红色顶点通过白色顶点到蓝色顶点的路径,那么我认为只有当两个相关边的权重之和最多为 Ti 时才允许该路径。对吗? 是的,没错。如果最多为 Ti,则允许从红色顶点到蓝色顶点的任何路径。 【参考方案1】:

确实,您可以使用如下复制策略:

将图 G 复制到 G'G"。将 G' 中的所有顶点标记为在 G 中,但带有撇号。所以在 G' 中有一个 S' 和一个 T'。同样,S"T" 属于 G"

S为起始顶点,T"为目标。就目前而言,G, G' G" 断开连接。但添加以下零权重,有向边:

G 中每个红色顶点 r 到其在 G' 中的镜像 r' 的边。 从 G' 中的每个蓝色顶点 b'G" 中的镜像 b" 的边.

所以没有从 G"G' 的路径,也没有从 G'G 的路径,也不是从 G"G

现在在 S 中启动一个 Dijkstra 算法,为优先级队列中的每个条目添加一个额外的数据属性:G' 中由边累积的路径的权重 仅。我们称之为w'。这个 w' 在队列的优先级中没有任何作用。路径的 total 权重决定了优先级,这是 Dijkstra 算法中的标准。该算法不应扩展路径,从而 w' 将超过 Ti。除了该特定限制之外,该算法的所有其余部分都可以与标准 Dijkstra 算法保持一致。

【讨论】:

以上是关于具有所需顶点的有向加权图的主要内容,如果未能解决你的问题,请参考以下文章

C++代码用数组链表存储无向加权图有向加权图,小白都能看懂

数据结构6(图)

图--06---加权有向图最短路径Dijstra算法

图论概述

求有向图两个顶点间的最短路径的方法,用简单语言或举例描述。

图的概念与实现