我们已经分别给出了节点数和边数N和M.然后我们得到了哪些节点是连接的。我们如何找到完成连接所需的最少额外边缘,以便您可以访问每个节点?通过找到答案,您应该能够遍历每个节点,直接或通过另一个节点到达目标。
输入示例:
4 2(节点和边缘)
0 1(节点0和节点1已连接)
2 3(节点2和节点3已连接)
然后应该给我们答案1,我们需要一个额外的边缘来完成连接。
答案 0 :(得分:3)
您需要的只是:
1)查找连接的组件。它可以通过 dfs 或 bfs 来完成。在您的示例中,这些组件分别为0, 1
和2, 3
。
2)然后你需要迭代所有组件并连接每两个连续组件的任意两个顶点。通过这种方式,您可以连接第一个和第二个组件,然后连接第二个和第三个组件,依此类推......在您的示例中,您可以将任何顶点0, 1
与任何顶点2, 3
连接起来。例如,您可以连接顶点0
和2
。
很容易看出,如果组件总数等于C
,则答案将是C - 1
个额外边缘。
答案 1 :(得分:0)
连接图表所需的最小连接数为N-1。但如果没有0连接的节点,这就成立了。
尝试并绘制类似于连接列表设计的路径。除了两端之外,每个节点的度数都精确为2。这样(让我们假设您的连接没有被定向),从任何节点开始,您只需访问下一个尚未访问的节点即可到达您的目标。
如果M> N-1,那么您可以搜索具有比所需更多连接的节点,并从那里继续。
尝试计算额外连接并将其与所需的最小数量(N-1)进行比较。