博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[置顶] 最小生成树Prim算法
阅读量:7026 次
发布时间:2019-06-28

本文共 1966 字,大约阅读时间需要 6 分钟。

二话不说直接贴代码

原图传送门:

但是上面展现的是克鲁斯卡尔算法。我这里是普里姆算法。

 

#include 
#include
#include
#include
using namespace std;typedef struct Line{ int Dot1; int Dot2; int Power;}Line;static const int arr[] = {0,1,6, 0,2,1, 0,3,5, 1,2,5, 1,4,3, 2,3,7, 2,4,5, 2,5,4, 3,5,2, 4,5,6};void BuildMap(list
& vet){ /*do { Line temp; cin>>temp.Dot1>>temp.Dot2>>temp.Power; vet.push_back(temp); }while(getchar() != '#');*/ for(int i = 0;i < sizeof(arr)/(sizeof(int)*3);++i) { Line temp; temp.Dot1 = arr[i*3]; temp.Dot2 = arr[i*3+1]; temp.Power = arr[i*3+2]; vet.push_back(temp); }}void MST(list
&map,list
& tree){ list
Open; list
OpenId; for(auto p = map.begin();p != map.end();++p) { Open.push_back(&*p); if(find(OpenId.begin(),OpenId.end(),p->Dot1) == OpenId.end()) OpenId.push_back(p->Dot1); if(find(OpenId.begin(),OpenId.end(),p->Dot2) == OpenId.end()) OpenId.push_back(p->Dot2); } Open.sort([](const Line* a,const Line* b){return a->Power < b->Power;});//支持C++11的编译器 tree.push_back(**Open.begin()); OpenId.erase(find(OpenId.begin(),OpenId.end(),(*Open.begin())->Dot1)); OpenId.erase(find(OpenId.begin(),OpenId.end(),(*Open.begin())->Dot2)); Open.pop_front(); auto q = Open.begin(); while(!OpenId.empty()) { if(find(OpenId.begin(),OpenId.end(),(*q)->Dot1) == OpenId.end() && find(OpenId.begin(),OpenId.end(),(*q)->Dot2) == OpenId.end()) {//已加入 Open.erase(q); q = Open.begin(); } else if(find(OpenId.begin(),OpenId.end(),(*q)->Dot1) == OpenId.end() || find(OpenId.begin(),OpenId.end(),(*q)->Dot2) == OpenId.end()) {//已加入 if(find(OpenId.begin(),OpenId.end(),(*q)->Dot1) == OpenId.end()) OpenId.erase(find(OpenId.begin(),OpenId.end(),(*q)->Dot2)); else if(find(OpenId.begin(),OpenId.end(),(*q)->Dot2) == OpenId.end()) OpenId.erase(find(OpenId.begin(),OpenId.end(),(*q)->Dot1)); tree.push_back(**q); Open.erase(q); q = Open.begin(); } else { ++q; } }}int main(){ list
map; list
tree; BuildMap(map); MST(map,tree); return 0;}

 

 

转载地址:http://cgoxl.baihongyu.com/

你可能感兴趣的文章
netstat命令详解
查看>>
Java项目命名规范
查看>>
springmvc文件上传配置
查看>>
Linux ASLR的实现
查看>>
基于Redmine建设敏捷团队信息平台
查看>>
Swift -- 数组
查看>>
C# 与 C++ 数据类型对照
查看>>
c#中自定义属性
查看>>
OpenStack云计算----安装与部署(中篇)
查看>>
Web在线升级系统
查看>>
erlang国际化时间转换(ISO 8601)
查看>>
Kubernetes集群部署
查看>>
Windows server 2008R2服务器系统登录密码破解
查看>>
Oracle Internal Research深入研究Oracle内部原理
查看>>
测试断言技巧
查看>>
NDK library "libgnustl_shared.so" not found
查看>>
我的友情链接
查看>>
cobbler------安装配置
查看>>
自己项目中PHP常用工具类大全分享
查看>>
java笔记整理——代理
查看>>