当前位置: 首页 > ai >正文

代码随想录算法训练营第五十七天|图论part7

prim算法精讲


普利姆算法用于求最小生成树

三步:

1.选择离树最近的点

2.该点加入树

3.更新距离表

#include <iostream>
#include <vector>
#include <climits>
using namespace std;int main(){int v,e;cin>>v>>e;vector<vector<int>>grid(v+1,vector<int>(v+1,10001));for(int i=0;i<e;i++){int v1,v2,val;cin>>v1>>v2>>val;grid[v1][v2]=val;grid[v2][v1]=val;}vector<int>minDist(v+1,10001);vector<bool>isInTree(v+1,false);for(int j=1;j<v;j++){//第一步选取距离最小的点int min=INT_MAX;   int cur;for(int i=1;i<=v;i++){    if(!isInTree[i]&&minDist[i]<min){min=minDist[i];cur=i;}}//当前节点加入集合isInTree[cur]=true;//更新当前minDistfor(int i=1;i<=v;i++){if(!isInTree[i]&&grid[cur][i]<minDist[i]){minDist[i]=grid[cur][i];}}}int ans=0;for(int i=2;i<=v;i++){ans+=minDist[i];}cout<<ans;}

注意!!!vector<vector<int>>grid(v+1,vector<int>(v+1,10001));
这一行很重要
不能初始化为0 这样不存在的边的权值为0 ,应该把不存在的边的权值设为最大值!!!!!!!

 

kruskal算法精讲

lambda表达式:

一句话:
一次性、匿名、可调用对象”,本质上编译器帮你生成一个未命名的函数对象类(closure type)。

“方括号抓变量,圆括号写参数,箭头指返回,花括号干正事。”

[ capture ] ( parameter_list )  { body }

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n=10000;
struct edge{int v1,v2,val;edge(int _v1,int _v2,int _val):v1(_v1),v2(_v2),val(_val){}
};
vector<int>father(n+1,0);void init(){for(int i=0;i<father.size();i++){father[i]=i;}
};
int find(int x){if(father[x]==x)return x;else return father[x]=find(father[x]);
}bool isSame(int x,int y){x=find(x);y=find(y);return x==y;
}void join(int u, int v){u=find(u);v=find(v);if(u==v) return ;father[v]=u;
}int main(){//数据读取int v,e;cin>>v>>e;vector<edge>edges;for(int i=0;i<e;i++){int v1,v2,val;cin>>v1>>v2>>val;edges.push_back(edge(v1,v2,val));}//排序sort(edges.begin(),edges.end(),[](edge &a,edge &b){return a.val<b.val;});int ans=0;init();//贪心选择for(auto _e:edges){int l=_e.v1;int r=_e.v2;int val=_e.val;if(isSame(l,r)){   //不是同一个集合的continue;}else{join(l,r);ans+=val;}}cout<<ans;
}

http://www.xdnf.cn/news/16683.html

相关文章:

  • PyTorch深度学习快速入门学习总结(三)
  • Kafka在Springboot项目中的实践
  • Linux和shell
  • 从概率到实践:深度解析朴素贝叶斯分类算法
  • SQL Server DATEADD()函数详解:时间计算的终极指南与实战案例
  • 深度学习G5周:Pix2Pix理论与实战
  • 深度学习(鱼书)day07--误差反向传播(前四节)
  • 基于PyTorch利用CNN实现MNIST的手写数字识别
  • 抽象工厂模式
  • 视觉图像处理中级篇 [2]—— 外观检查 / 伤痕模式的原理与优化设置方法
  • 中宇联:以“智云融合+AI”赋能全栈云MSP服务,深化阿里云生态合作
  • 【大模型理论篇】混合思考之自适应思维链
  • Kubernetes架构概览
  • MySQL转PostgreSQL迁移实战:从语法错误到完美兼容
  • spring cloud ——gateway网关
  • 嵌入式系统常用架构
  • 【02】大恒相机SDK C#开发 —— 初始化相机,采集第一帧图像
  • 如何使用一台电脑adb调试多个Android设备
  • vue+elementUI上传图片至七牛云组件封装及循环使用
  • 【机器学习】KNN算法与模型评估调优
  • 蓝牙 BR/EDR 与 BLE PHY
  • 告别物业思维:科技正重构产业园区的价值坐标系
  • 微信小程序中进行参数传递的方法
  • 基于Spring Boot实现中医医学处方管理实践
  • 【数据结构】算法代码
  • 将开发的软件安装到手机:环境配置、android studio设置、命令行操作
  • Coze Studio:开源AI Agent开发工具的全方位实践指南
  • Rust视频处理开源项目精选
  • 电商数据采集 API 接口:开启数据驱动业务的新引擎
  • Android依赖注入框架Hilt入门指南