kruscal用数组代替并查集可以吗?
用一个bool join[max_n]数组保存点是否已经有边连接,在遍历边时,如果边两端的点x和y的join[x]和join[y]都等于1,则说明这两个点都有边连接他们了,则不考虑这条边。这样可以吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
用一个bool join[max_n]数组保存点是否已经有边连接,在遍历边时,如果边两端的点x和y的join[x]和join[y]都等于1,则说明这两个点都有边连接他们了,则不考虑这条边。这样可以吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
两个节点 join 为 1 并不能说明两个点在同一个联通块的。也就是说可能两个点在不同联通块内而都有别边连接,那么这条边会合并两个联通块。所以还是并查集吧。
当然有一种叫做 link-cut-tree 的数据结构也可以轻松维护最小生成树,本质也是维护联通块的连通性。
kruscal算法在求最小生成树时,充分利用了贪心的特点。比如:
AB和CD会最先被选出来,此时它们被访问过了,但不属于同一棵树。如果ABCD不联通,此时算法已经结束,求出了这个森林的所有最小生成树,但使用数组并不知道这些点是属于一棵树还是分别属于多棵树。