Algorithm 如何通过查看起始顶点的最小数目来探索有向图(DAG)?

Algorithm 如何通过查看起始顶点的最小数目来探索有向图(DAG)?,algorithm,graph-algorithm,Algorithm,Graph Algorithm,给定一个DAG(可能不是强连接的e.i,由几个连接的组件组成),目标是找到访问所需的最小起始顶点数,以完全浏览图形。 我想到的一种方法是生成给定顶点的所有排列,并按该顺序运行拓扑排序。回程最少的那个就是答案。 有没有一个有效的算法来执行上述任务?这是一个著名的问题,叫做wiki,可惜wiki没有提到它,你可以在谷歌上搜索它 如方法所述,最小路径覆盖问题在正规图中。但在DAG中,它可以通过以下方法解决 方法: 将每个顶点u划分为两个不同的顶点u1和u2。对于原始图形中的每条边(u->v),在新

给定一个DAG(可能不是强连接的e.i,由几个连接的组件组成),目标是找到访问所需的最小起始顶点数,以完全浏览图形。
我想到的一种方法是生成给定顶点的所有排列,并按该顺序运行拓扑排序。回程最少的那个就是答案。

有没有一个有效的算法来执行上述任务?

这是一个著名的问题,叫做wiki,可惜wiki没有提到它,你可以在谷歌上搜索它

如方法所述,最小路径覆盖问题在正规图中。但在DAG中,它可以通过以下方法解决

方法:


将每个顶点
u
划分为两个不同的顶点
u1
u2
。对于原始图形中的每条边
(u->v)
,在新图形中添加边
(u1->v2)
。然后做任何你喜欢的匹配算法。结果是
n-最大匹配
n
是原始图中的顶点总数。

如果给定一组连接的节点,最小起始顶点数不总是1吗?如果集合已断开连接,则为0。不必连接图形。所以不必担心。因此,如果图形未连接,则无法完全浏览它,否?图形本身可能由多个连接的组件组成。所以我需要访问多个顶点来充分探索它..啊。所以答案是完全连通子集的数量?@ilikepot我建议使用它,作为旁注,基本上是Dinic的最大流算法。Ford Fulkerson的实现会稍微简单一些,但也会逐渐变慢。我如何使用Dinic的算法来解决它?我的意思是,这不是最大流吗?@ilikepot以一种非常简单的方式进行未加权的二部匹配。对于原始图中的每个顶点,在新图中创建两个不同的顶点