我有一个未加权的有向图,可能有也可能没有循环。现在给定一组节点,我需要返回一个具有给定节点和最小节点数量的图形,以便它们连接起来。我不能创建新的边缘,所以我需要使用现有的边缘。
希望这些照片清楚地表明。从图表开始,
假设我们想要具有节点c,f和g的图形,该函数将返回该图形
然而,还有一个条件。每个边都有一个名为required的布尔变量。如果将此设置为true,则此边缘和相应的节点也需要包含在图形中。
这是另一张图片来说明 不需要黑色边缘,但需要红色边缘 假设我们给a和c作为要包含的节点。
因此,不要返回A-> C的图表, 它将返回此
为了使这一点更加清晰,如果我们想要一个带有b和c的图形,它也会返回该图形,因为该边缘是必需的。
如何返回此图表?我宁愿没有返回循环的图表,但我意识到这并不总是可行的,因为循环的边缘可能都被标记为必需。
我最初的想法是将图形的副本保留在所需的边缘上,然后尝试将不相交的图形拼凑回来。但是在我将图形重新组合在一起的所有尝试中,我能够找到一个反例,显示它不是最小图形。
答案 0 :(得分:1)
第一个示例中的预期输出是否包含节点e,其他所有节点都可以到达?或者你的意思是弱连接(意味着边缘的方向无关紧要)?我猜第二种情况就是这种情况(从你的A,B,C例子来看),然后你可以
这就是你想要的吗?