首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子图算法

子图算法
EN

Stack Overflow用户
提问于 2009-12-03 21:21:27
回答 2查看 2.1K关注 0票数 1

我想知道是否有一个有效的算法S= F( V,G)来从DAG G= (V,E)中构造一个子图S,使得S中的所有路径都包含V的顶点v。如果是这样的话,对于一组顶点N,可以有效地将F扩展到F'(N,G)。我对最初存储DAG的任何数据结构都是开放的。

实际上,我忘记添加的一个条件是,G有一个唯一的顶点r,没有传入边,并且路径必须是这样的形式,其中d是没有传出边的顶点。

我错过的另一个条件是给定扩展的F'(N,G),使得对于N的所有v,w如果< r,..,v,..,w>其中w是一个接收器,那么我们应该忽略路径< r,..,v,..,x>其中x != w。

我实际上有一个解决方案,但当#V > 2000和#N >2时它不能扩展。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-03 21:26:01

我假设您正在寻找G=( {r} + v + {d},E)的最大子图S,其中r是唯一的源节点,d是目的节点,使得从r到d的每条路径都经过一个特定的节点v。

我提出的算法:

例如,使用Find the paths between two given nodes?

  • Find
  1. 和中提供的答案,使用相同的算法查找r和v之间的所有路径。由于G是非循环的,因此从v到d的任何路径都不能返回到步骤1中已找到的路径。因此,在结果图中,r和d之间的所有路径都将通过v。
票数 1
EN

Stack Overflow用户

发布于 2009-12-03 21:36:35

结果图包含从v可达的节点和从v可达的节点v(或转置的子图中从v可达的节点)。获取可达节点集可以高效地完成。

对于一组节点,这可能很容易扩展:您只需在广度优先搜索的开始添加所有这些节点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1839830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档