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

代码随想录算法训练营第五十七天|图论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.lryc.cn/news/606289.html

相关文章:

  • Qt 消息弹窗 Toast
  • 两款免费数据恢复软件介绍,Win/Mac均可用
  • python后端之DRF框架(下篇)
  • 《零基础入门AI:传统机器学习核心算法(决策树、随机森林与线性回归)》
  • wxPython 实践(五)高级控件
  • 【ad-hoc构造】P10033 「Cfz Round 3」Sum of Permutation|普及+
  • vscode插件开发(腾讯混元)
  • Go再进阶:结构体、接口与面向对象编程
  • Cesium 快速入门(三)Viewer:三维场景的“外壳”
  • 基于深度学习的医学图像分析:使用BERT实现医学文本分类
  • 零信任网络概念及在网络安全中的应用
  • 【数据库】MySQL 详细安装与基础使用教程(8版本下载及安装)
  • RWA+AI算力賦能全球醫療数字產業升級高峰論壇——暨BitHive BTT 全球發佈會
  • C++面试5题--6day
  • wpf之ContentPresenter
  • PyTorch深度学习快速入门学习总结(三)
  • 【机器学习篇】01day.python机器学习篇Scikit-learn入门
  • 机器学习①【机器学习的定义以及核心思想、数据集:机器学习的“燃料”(组成和获取)】
  • 运行图生视频/文生视频(Wan2.X等)的显卡配置总结
  • 基于deepseek的文本解析 - 超长文本的md结构化
  • CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)
  • 深入解析LLM层归一化:稳定训练的关键
  • 模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)
  • 基于PyTorch利用CNN实现MNIST的手写数字识别
  • 【源力觉醒 创作者计划】对比与实践:基于文心大模型 4.5 的 Ollama+CherryStudio 知识库搭建教程
  • 如何系统性了解程序
  • 【Java安全】CC1链
  • <RT1176系列13>LWIP Ping功能入门级应用和基础API解析
  • MySQL 8.0 OCP 1Z0-908 题目解析(41)
  • python制作的软件工具安装包