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++ 已大改)相关推荐

  1. 末位淘汰!985高校硕士毕业拟新规:强制20%不通过或需大改?

    来源:学术志,募格课堂,参考来源:教育部.知乎.各校研究生院.软科.高校人才网V 近日,临近硕士研究生招生考试,新生跃跃欲试,却有这样一批985高校的准毕业生愁眉不展,因为2023年的毕业新规拟发布, ...

  2. 最小生成树Prim算法Java版

    最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...

  3. 计算机专硕考数一英一,专硕难度升级!改考数一英一,这所近2.3万人报考的热门高校大改...

    ↑↑点我的头像,到主页领取更多考研干货资料! 在全国首次研究生教育会议召开的大背景下,安徽.中国传媒大学的硕士招生大改革消息冲上热搜,又一所高校官宣了详细的改革方案,相比中传,这所学校的改革力度也不小 ...

  4. 西南科技大学OJ题 求最小生成树(Prim算法)1075

    求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...

  5. 最小生成树 - Prim算法

    最小生成树 - Prim算法 思路: 采用 贪心策略,每次选取连通块外延的最短边和对应的点放入连通块,再更新新的连通块外延的边.连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小. 时间复杂度: ...

  6. 计算机考研哪些学校改科目了,大量考研院校初试科目大改,有你的学校么?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 国家这两年一直鼓励招生单位选用统考科目试卷,一些院校 积极响应政策,今年发生了大量初试科目大改的情况,让人措手 不及! 一.自命题改为统考313 继去年像 ...

  7. 可视化最小生成树Prim、Kruskal

    代码下载链接:(41条消息) 可视化最小生成树Kruskal,DEV配EGE-C文档类资源-CSDN文库 代码下载链接:(41条消息) 可视化最小生成树Prim,DEV配EGE-C文档类资源-CSDN ...

  8. poj1861 最小生成树 prim amp; kruskal

    // poj1861 最小生成树 prim & kruskal // // 一个水题,为的仅仅是回味一下模板.日后好有个照顾不是#include <cstdio> #include ...

  9. 大改ShuffleNetV2网络,注意力机制,csp,卷积裁剪

    大改ShuffleNetV2网络,注意力机制,csp,卷积裁剪 1.背景 在移动端场景中,目前有很多不错的轻量级网络可以选择,例如google的mobilenet系列,efficient lite系列 ...

最新文章

  1. 重写enum的valueof方法等
  2. android广播接收器
  3. Shell脚本实战之文件批量创建和修改
  4. python单例模式的五种实现方式
  5. 从SOURCE_BUFFER单元开始存放了20个字母A, 编程将这20个字母A的字符串传送到DEST_BUFFER开始的单元中.
  6. 英语 语义分割_英语关系分句的翻译技巧
  7. fopen在linux中打开文件夹,plain C:用fopen()打开一个目录
  8. 搭建nginx + python + django +memcached+ mysql +fastcgi 环境
  9. 干货|机器学习零基础?不要怕,吴恩达课程笔记第三周!逻辑回归与正则
  10. java 保垒机telnet,开源堡垒机系统Teleport
  11. Qt之QLineEdit详解(附源码)
  12. Stanford CoreNLP遇到的问题
  13. 优秀软件架构师成长之路
  14. AndroidStudio_安卓原生开发_全局异常处理_并记录系统错误日志---Android原生开发工作笔记138
  15. C++ 两点之间的距离
  16. 什么是智能dns解析
  17. Gary Gygax的倒台,密切关注Linux端口等
  18. ISIS-广播网络DIS更新LSDB
  19. JavaEE经典试题(一)
  20. 摄像头 虚拟服务器页面,虚拟云服务器能调用本地摄像头

热门文章

  1. java crontriggerbean_java – 使用JobStoreTX为石英聚类配置CronTriggerFactoryBean
  2. python怎样导入scrapy_(Python)在导入的模块scrapy中找不到任何项目
  3. 带电检测必要性_接地电阻检测分析的必要性
  4. 对比四大企业级linux版本_Linux家族族谱
  5. 二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会
  6. php数组能不能静态,php 为什么常量可以用数组定义 静态变量却不能
  7. 父子组建传值_浅谈Vue父子组件和非父子组件传值问题
  8. docker 容器端口访问不到_docker容器无法访问宿主机端口的解决
  9. lua jit java jit_Lua JIT 2.0 发布了,一百五十倍的性能提升!
  10. 电脑系统linux普通用户,Linux操作系统用户管理