如何找到完成连接所需的最小额外边缘量?

时间:2016-01-14 12:42:04

标签: algorithm graph traversal

我们已经分别给出了节点数和边数N和M.然后我们得到了哪些节点是连接的。我们如何找到完成连接所需的最少额外边缘,以便您可以访问每个节点?通过找到答案,您应该能够遍历每个节点,直接或通过另一个节点到达目标。

输入示例:

4 2(节点和边缘)

0 1(节点0和节点1已连接)

2 3(节点2和节点3已连接)

然后应该给我们答案1,我们需要一个额外的边缘来完成连接。

2 个答案:

答案 0 :(得分:3)

您需要的只是:

1)查找连接的组件。它可以通过 dfs bfs 来完成。在您的示例中,这些组件分别为0, 12, 3

2)然后你需要迭代所有组件并连接每两个连续组件的任意两个顶点。通过这种方式,您可以连接第一个和第二个组件,然后连接第二个和第三个组件,依此类推......在您的示例中,您可以将任何顶点0, 1与任何顶点2, 3连接起来。例如,您可以连接顶点02

很容易看出,如果组件总数等于C,则答案将是C - 1个额外边缘。

答案 1 :(得分:0)

连接图表所需的最小连接数为N-1。但如果没有0连接的节点,这就成立了。

尝试并绘制类似于连接列表设计的路径。除了两端之外,每个节点的度数都精确为2。这样(让我们假设您的连接没有被定向),从任何节点开始,您只需访问下一个尚未访问的节点即可到达您的目标。

如果M> N-1,那么您可以搜索具有比所需更多连接的节点,并从那里继续。

尝试计算额外连接并将其与所需的最小数量(N-1)进行比较。