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

标签 java algorithm graph minimum-spanning-tree kruskals-algorithm

我遇到了一个经典的 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 算法拒绝向解决方案添加边,这与您的情况非常不同。

关于java - 找到连接图的最低成本的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516804/

相关文章:

c# - 将 3 个列表比较并重组为一个列表?

独立顶点覆盖算法

java - find Minimum window substring - leetcode - 解决方案不工作

javascript - 如何设置可以缩放和拖动的背景图片?

java - 统一成本搜索

java - 无法使用 java 创建 ActiveMQ 队列或发送消息

java - 如何从外部调用已经运行了一段时间的 java 程序

java - 如何解决Word文档中的包应包含内容类型部分[M1.13]

java - 如何使用 Java 创建 MySQL 日志

c++ - 185000阵列后BFPRT(中位数中值)算法崩溃