C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 优先级队列和Prim算法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了C参手册,我仍然不清楚如何在STL中使用priorityqueue数据结构.

所以,基本上我一直在尝试使用堆来实现自己的.

我这样做是为了实现Prim的算法.

Vector <int,int> pq;

这是我的优先队列.第一个字段是节点,第二个字段是现有树的权重.

我计划每次通过更新其邻居节点的权重将新节点添加到树中时修改pq中的权重值.

>如何访问此向量的各个元素?我还需要能够随意删除元素.

这是实现优先级队列的好方法吗?如果我想在容器中添加一个字段,即

Vector<int,int,int> MST

>我如何访问第三个元素?我希望以这种方式存储生成的MST,使得前两个字段表示形成边缘的顶点,第三个字段表示权重.

如果有人能告诉我如何使用push_BACk为这个向量分配元素,这也会有所帮助.

>此外,传统的C STL优先级队列是否有助于此,因为每次将新元素添加到MST时我需要更新优先级值?当值被修改时,它会根据优先级自我纠正吗?
>另外一个问题,这些向量,当我将它们传递给函数,并尝试进行更改时,它是值传递还是通过引用传递 – 或者,更改是否反映在函数外部?

解决方法

在Prim的算法中,随机访问不需要的元素.您只需要跳过连接已连接并向前传递的队列中的元素.

所以算法如下:

>选择一个节点N.
>将N的所有边添加到PQ
>从PQ中获得最低成本优势

>如果它连接已在树中的节点,则跳过它
>否则将此边添加到树中,调用新节点N并返回到第2点.

添加节点后,只需检查树的大小是否已经是图形的大小 – 1.如果是,则完成.

请注意,PQ上的唯一操作是add_element和pop_minimum – 因此std :: priority_queue将起作用.

大佬总结

以上是大佬教程为你收集整理的c – 优先级队列和Prim算法全部内容,希望文章能够帮你解决c – 优先级队列和Prim算法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。