最小生成树prim (c++ 已大改)
2019独角兽企业重金招聘Python工程师标准>>>
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <initializer_list>
#include <memory>
template<typename T>
class Graph{private:std::map<T, map<T, unsigned int>> graph; //存储无向图. std::map<T, std::vector<T>> edge; //邻接链表. 也就是说给定一个结点另外有多少个结点是与其相连接的. std::queue<T> vertex; //存储所有的结点. std::set<T> memberFromQueue; //从栈内弹出的元素放到set中.std::vector<T> currentVertex;unsigned int vertexNumber;public:template<typename Ty, unsigned int N>Graph(const Ty (&edges)[N][3]);~Graph();void primAlgorithm();
};
template<typename T>
template<typename Ty, unsigned int N>
Graph<T>::Graph(const Ty (&edges)[N][3]):vertex(nullptr),vertexNumber(vertexs.size())
{if(vertexs.size() == 0){throw std::bad_cast();}std::cout<<"enter successfully"<<std::endl;for(int i=0; i<N; ++i){this->graph[edges[i][0]][edges[i][2]] = edges[i][1]; //map的特性就是如果其中不含有edges[i][0]以及edge[i][0]元素就会自动创建一个. this->graph[edges[i][2]][edges[i][0]] = edges[i][1];this->edge[edges[i][0]].push_back(edges[i][2]); //与结点edges[i][0]相接的所有结点,被放到与其对应的vector中. this->edge[edges[i][2]].push_back(edges[i][0]); //同上. }for(std::map<Ty, std::map<Ty, unsigned int>>::const_iterator it = this->edge.cbegin(); it != this->edge.cend(); ++it){ //把所有结点都放到vertex中. this->vertex.push(it->first);}std::cout<<"out"<<std::endl;
}
template<typename T>
void Graph<T>::primAlgorithm()
{T head;int total = 0;head = this->vertex.front(); //弹出栈内第一个元素. this->vertex.pop(); //删除该元素.this->memberFromQueue.insert(head);this->currentVertex.push_back(head);while( !this->vertex.empty() ){ //当给定的无向图不为空. int i=0;int j=0;int min=0;int flag =0;T start;T end;for(i=0; i<this->currentVertex.size(); ++i){ //当前顶点. for(j=0; i<this->edge[this->currentVertex[i]].size(); ++j){ //与当前顶点(head)相连接的有多少个顶点, 逐个访问这些与当前顶点相连接的结点. if(this->memberFromQueue.find(this->edge[this->currentVertex[i]][j]) == this->memberFromQueue.end()){ //查找当前顶点时候存在memberFromQueue中. if(flag == 0){ //如果给定的顶点是树中的第一个. 那么令min等于当前顶点与任意一边的加权值. min = this->graph[this->currentVertex[i]][this->edge[this->currentVertex[i]][j]]; //获得的是currentVertex[i] 和 edge[currentVertex[i]] [j] 这两个结点的加权值.flag = 1; }if(this->graph[this->currentVertex[i]][this->edge[this->currentVertex[i]][j]] <= min){min = this->graph[this->currentVertex[i][this->edge[this->currentVertex[i]][j]];start = this->currentVertex[i];end = this->edge[this->currentVertex[i]][j];}}}}std::cout<<start<<"----"<<min<<"-----"<<end<<std::endl;//输出边以及加权值.this->vertex.pop(); //删除栈内当前的顶点元素.this->memberFromQueue.insert(end);this->currentVertex.push_back(end); }}
转载于:https://my.oschina.net/SHIHUAMarryMe/blog/601102
最小生成树prim (c++ 已大改)相关推荐
- 末位淘汰!985高校硕士毕业拟新规:强制20%不通过或需大改?
来源:学术志,募格课堂,参考来源:教育部.知乎.各校研究生院.软科.高校人才网V 近日,临近硕士研究生招生考试,新生跃跃欲试,却有这样一批985高校的准毕业生愁眉不展,因为2023年的毕业新规拟发布, ...
- 最小生成树Prim算法Java版
最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...
- 计算机专硕考数一英一,专硕难度升级!改考数一英一,这所近2.3万人报考的热门高校大改...
↑↑点我的头像,到主页领取更多考研干货资料! 在全国首次研究生教育会议召开的大背景下,安徽.中国传媒大学的硕士招生大改革消息冲上热搜,又一所高校官宣了详细的改革方案,相比中传,这所学校的改革力度也不小 ...
- 西南科技大学OJ题 求最小生成树(Prim算法)1075
求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...
- 最小生成树 - Prim算法
最小生成树 - Prim算法 思路: 采用 贪心策略,每次选取连通块外延的最短边和对应的点放入连通块,再更新新的连通块外延的边.连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小. 时间复杂度: ...
- 计算机考研哪些学校改科目了,大量考研院校初试科目大改,有你的学校么?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 国家这两年一直鼓励招生单位选用统考科目试卷,一些院校 积极响应政策,今年发生了大量初试科目大改的情况,让人措手 不及! 一.自命题改为统考313 继去年像 ...
- 可视化最小生成树Prim、Kruskal
代码下载链接:(41条消息) 可视化最小生成树Kruskal,DEV配EGE-C文档类资源-CSDN文库 代码下载链接:(41条消息) 可视化最小生成树Prim,DEV配EGE-C文档类资源-CSDN ...
- poj1861 最小生成树 prim amp; kruskal
// poj1861 最小生成树 prim & kruskal // // 一个水题,为的仅仅是回味一下模板.日后好有个照顾不是#include <cstdio> #include ...
- 大改ShuffleNetV2网络,注意力机制,csp,卷积裁剪
大改ShuffleNetV2网络,注意力机制,csp,卷积裁剪 1.背景 在移动端场景中,目前有很多不错的轻量级网络可以选择,例如google的mobilenet系列,efficient lite系列 ...
最新文章
- 重写enum的valueof方法等
- android广播接收器
- Shell脚本实战之文件批量创建和修改
- python单例模式的五种实现方式
- 从SOURCE_BUFFER单元开始存放了20个字母A, 编程将这20个字母A的字符串传送到DEST_BUFFER开始的单元中.
- 英语 语义分割_英语关系分句的翻译技巧
- fopen在linux中打开文件夹,plain C:用fopen()打开一个目录
- 搭建nginx + python + django +memcached+ mysql +fastcgi 环境
- 干货|机器学习零基础?不要怕,吴恩达课程笔记第三周!逻辑回归与正则
- java 保垒机telnet,开源堡垒机系统Teleport
- Qt之QLineEdit详解(附源码)
- Stanford CoreNLP遇到的问题
- 优秀软件架构师成长之路
- AndroidStudio_安卓原生开发_全局异常处理_并记录系统错误日志---Android原生开发工作笔记138
- C++ 两点之间的距离
- 什么是智能dns解析
- Gary Gygax的倒台,密切关注Linux端口等
- ISIS-广播网络DIS更新LSDB
- JavaEE经典试题(一)
- 摄像头 虚拟服务器页面,虚拟云服务器能调用本地摄像头
热门文章
- java crontriggerbean_java – 使用JobStoreTX为石英聚类配置CronTriggerFactoryBean
- python怎样导入scrapy_(Python)在导入的模块scrapy中找不到任何项目
- 带电检测必要性_接地电阻检测分析的必要性
- 对比四大企业级linux版本_Linux家族族谱
- 二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会
- php数组能不能静态,php 为什么常量可以用数组定义 静态变量却不能
- 父子组建传值_浅谈Vue父子组件和非父子组件传值问题
- docker 容器端口访问不到_docker容器无法访问宿主机端口的解决
- lua jit java jit_Lua JIT 2.0 发布了,一百五十倍的性能提升!
- 电脑系统linux普通用户,Linux操作系统用户管理