繁体   English   中英

找到连接图的最低成本的替代方法

[英]Alternate way to find minimum cost of connecting a graph

我遇到了一个经典的 Kruskals 问题,给定一个无向图和边之间的权重集,我被要求找到连接边所需的最小成本。 我对 Kruskals 算法不太熟悉,所以我想出了自己的解决方案。 但是,它在一些测试用例上出现了不足。 这是算法: 1- 根据权重对边缘进行排序。 使用了 Node.Node 类型的优先级队列,由 src、dest 和 weight 组成。

2- 使用大小为 N 的 boolean 数组跟踪访问的节点,其中 N 是节点数。

2-轮询优先队列(移除头部)。 如果 src 或 dest 没有被访问,则将权重添加到解决方案中,并将它们都标记为已访问。

有人可以帮我解释一下为什么这个算法不够用吗? 从逻辑上讲,在我看来,访问过的数组应该跟踪确保没有循环,因为如果 src 或 dest 未被访问,我只会将其添加到解决方案中。

在某些时候,您通常需要在解决方案中添加一条边,同时访问两个端点。 例如,考虑下图:

A --1-- B
|
|
3
|
|
C --2-- D

在解决方案中添加边 AB 和 CD 后,您的算法将拒绝添加 AC,因为 A 和 C 都已访问。

如果端点已经在同一棵树中,Kruskal 的算法拒绝向解决方案添加边,这与您的情况非常不同。

您可以使用 prims 算法来查找 MST。 这比克鲁斯卡尔容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM