c – 优先级队列和Prim算法
我已经阅读了C参考手册,我仍然不清楚如何在STL中使用priorityqueue数据结构.
所以,基本上我一直在尝试使用堆来实现自己的. 我这样做是为了实现Prim的算法. Vector <int,int> pq; 这是我的优先队列.第一个字段是节点,第二个字段是现有树的权重. 我计划每次通过更新其邻居节点的权重将新节点添加到树中时修改pq中的权重值. >如何访问此向量的各个元素?我还需要能够随意删除元素. 这是实现优先级队列的好方法吗?如果我想在容器中添加另一个字段,即 Vector<int,int,int> MST >我如何访问第三个元素?我希望以这种方式存储生成的MST,使得前两个字段表示形成边缘的顶点,第三个字段表示权重. 如果有人能告诉我如何使用push_back为这个向量分配元素,这也会有所帮助. >此外,传统的C STL优先级队列是否有助于此,因为每次将新元素添加到MST时我需要更新优先级值?当值被修改时,它会根据优先级自我纠正吗? 解决方法
在Prim的算法中,随机访问不需要的元素.您只需要跳过连接已连接并向前传递的队列中的元素.
所以算法如下: >选择一个节点N. >如果它连接已在树中的节点,则跳过它 添加节点后,只需检查树的大小是否已经是图形的大小 – 1.如果是,则完成. 请注意,PQ上的唯一操作是add_element和pop_minimum – 因此std :: priority_queue将起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |