最小生成树prim (c++ 已大改)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

#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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端接入HTTP协议浅析

【摘要】&#xff1a;本文整理并简要分析了HTTP协议的交互过程和内容格式&#xff0c;包括HTTP请求、HTTP应答的头域和实体内容&#xff0c;HTTP 1.0与HTTP 1.1的差异&#xff0c;并举例说明了Chunked编码的工作过程原理。1、HTTP协议简介浏览器和Web服务器之间一问一答的交互过…

互联网传真 传真指令_传真的完整形式是什么?

互联网传真 传真指令传真&#xff1a;传真 (FAX: Facsimile) FAX is an abbreviation of "Facsimile". 传真是“传真”的缩写 。 It is commonly written and spoken as FAX. It is a telephonic transmission of a scanned copy of text and images printed on a p…

C#使用七牛云存储上传下载文件、自定义回调

项目需要将音视频文件上传服务器&#xff0c;考虑并发要求高&#xff0c;通过七牛来实现。 做了一个简易的压力测试&#xff0c;同时上传多个文件&#xff0c;七牛自己应该有队列处理并发请求&#xff0c;我无论同时提交多少个文件&#xff0c;七牛是批量一个个排队处理了。 一…

Linux下DRBD配置

一、什么是DRBD1、简介 Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。数据镜像&#xff1a;实时、透明、同步&#xff08;所有服务器都成功后返回&#xff09;、异步&#xff08;本地服务器成功后返回…

vue3实现本地开发使用的px转换成vw,px转换成rem方法整理

前言&#xff1a; 项目中如果想本地开发使用px&#xff0c;但是界面上线以后界面是自适应的效果,可以有多种方式来实现效果。 一、px转成vw 1、安装&#xff0c;安装成功后&#xff0c;node_modules 会新增这两个插件包 npm i postcss-px-to-viewport-8-plugin 2、新增 post…

airplay2协议是什么_什么是AirPlay?

airplay2协议是什么AirPlay (AirPlay) AirPlay is released by Apple in the year 2004. It allows the easy exchange of audios without the use of any wired technique between the two devices. It was previously termed as AirTunes and later got its name changed to …

微信支付开发(5) 订单查询

本文介绍微信支付中订单查询功能的实现。 作者&#xff1a;方倍工作室 地址&#xff1a;http://www.cnblogs.com/txw1958/p/wxpay-order-query.html 一、订单查询 因为某一方技术的原因&#xff0c;可能导致商户在预期时间内都收不到最终支付通知&#xff0c;此时商户可以通过该…

python饼形图_Python | 饼形图

python饼形图A pie plot or a pie chart is a circular statistical graphic technique, in which a circle is divided into slices with respect to numerical proportion. In a pie chart, the arc length, central angle, and area of each slice, is proportional to the …

appweb ejs_EJS部分

appweb ejsHi! Welcome. Today, we are going to look at EJS partials. EJS Partials help us avoid repetition of the same code on several web pages. 嗨&#xff01; 欢迎。 今天&#xff0c;我们将看EJS局​​部函数 。 EJS Partials帮助我们避免在多个网页上重复相同的…

同事反馈环:如何实现持续改进的文化

“魔镜魔镜告诉我&#xff0c;谁才是最美丽的人&#xff1f;”&#xff0c;邪恶的皇后如此问道。似乎在精益和敏捷企业中也会有很多与《白雪公主》中类似的问题&#xff0c;如果我们没有一面可以看到我们正在做什么的镜子&#xff0c;我们就很难搞清楚我们有多么美丽&#xff0…

经典功率谱估计及Matlab仿真

原文出自&#xff1a;http://www.cnblogs.com/jacklu/p/5140913.html 功率谱估计在分析平稳各态遍历随机信号频率成分领域被广泛使用&#xff0c;并且已被成功应用到雷达信号处理、故障诊断等实际工程中。本文给出了经典功率谱估计的几类方法&#xff0c;并通过Matlab的实验仿真…

极验验证码流程-3.图片加密处理 图片移位

终于把图片加密给搞定了&#xff0c;原理是他把图分成了52个部分&#xff0c;然后通过移动来形成新的图片 主要的位置关系看代码 顺便吐槽下ruby,小众语言就是这么不方便&#xff0c;很多库都没有&#xff0c;百度了半天 最后换成了java来写 图片保存到本地的就不详细说了 主要…

html-iframe_HTML iframe

html-iframeiframe (Iframes) In HTML, iframes are used to display a webpage inside another webpage. 在HTML中&#xff0c; iframe用于在另一个网页内显示一个网页。 Syntax: 句法&#xff1a; <iframe src"URL"></iframe>The <iframe> tag…

集合操作(三)Set

2019独角兽企业重金招聘Python工程师标准>>> Set集合 HashSet 哈希表保证元素的唯一性依赖于两个方法一个是hashCode方法一个是equals方法 如果两个对象的hashCode值相同,并且调用该对象的equals方法返回的是true的时候,那么就说明两个对象是相同的 结论&#xff1a…

第6周 搜索与排序

1 查找里程 给你这样一张里程表&#xff0c;如何写一个程序&#xff0c;输入两地的地名&#xff0c;能输出期间的里程&#xff1f; #include <stdio.h> #include <string.h> #define C_LEN 30typedef struct city {char name1[C_LEN];char name2[C_LEN];int distan…

(转) Twisted :第十九部分 改变之前的想法

2019独角兽企业重金招聘Python工程师标准>>> 简介 Twisted是一个正在进展的项目,它的开发者会定期添加新的特性并且扩展旧的特性. 随着Twisted 10.1.0发布,开发者向 Deferred 类添加了一个新的特性—— cancellation ——这正是我们今天要研究的. 异步编程将请求和响…

Mac 获取 Brew

2019独角兽企业重金招聘Python工程师标准>>> 终端输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 转载于:https://my.oschina.net/fdstudio/blog/610680

express 项目生成器_用于项目的Express模板生成器(2)| 应用程序结构研究

express 项目生成器Hello! In express template generator for your projects (1), we looked at express generator and how we can start an express application with stressing to build a brand new structure of all required files. 你好&#xff01; 在针对您的项目的E…

Linux 服务器中文乱码编码解决

Linux环境的ECS中&#xff0c;若出现如下中文显示为乱码的情况。 一般原因如下: 1. 未安装中文语言包 2. 未设置正确的默认语言 3. SSH 终端未正确配置 本文以Centos 6.5为例&#xff0c;演示如何解决中文乱码问题。 1. 使用 locale -a |grep zh_CN查看系统是否已经安装…

ldo regula_使用C中的Regula Falsi方法找到复多项式方程的根

ldo regulaRegula Falsi方法 (Regula Falsi method) About the method: 关于方法&#xff1a; We often hear many children and even many adults complaining about the difficulty level that they face while solving complex polynomial equations. It is also difficult…