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

wordpress 个人电脑vue seo优化

wordpress 个人电脑,vue seo优化,邯郸信息港最新招聘信息,什么平台可以做引流推广目录 一、最小生成树 二、Kruskal算法求最小生成树 三、代码 一、最小生成树 什么是最小生成树? 对于一个n个节点的带权图,从中选出n-1条边(保持每个节点的联通)构成一棵树(不能带环),使得…

目录

一、最小生成树

二、Kruskal算法求最小生成树

三、代码


一、最小生成树

什么是最小生成树? 

对于一个n个节点的带权图,从中选出n-1条边(保持每个节点的联通)构成一棵树(不能带环),使得所有边的权值和最小,即为最小生成树

要点:

  • 选n-1条边
  • 要构成一颗树,则树中不能带环
  • 节点间要互相连通,即从一个节点能够到达任意一个节点
  • 边的权重和最小


二、Kruskal算法求最小生成树

Kruskal算法适用于稀疏图,因为其过程基于边的选择,如果图中的边过多可能导致效率变低

其思路如下:

  • 将图中的所有边去掉,只留下节点
  • 按照边权的顺序,从权重小的边开始将边回填到图中
  • 如果某个边回填到图中会导致带环,则丢弃
  • 当回填了n-1条边,得到最小生成树

例如:

这是我们的原图

去掉所有的边

按照权重从小到大回填边

此时发现有两条权重为4的边,选择哪条都可以,这也说明我们的最小生成树并不是唯一的,但最小权重和一定是唯一的

此时有两条权重为5的边,但如果我们把V1和V4之间的边回填的话,就带环了,这是不符合要求的,因此我们选择V2和V3之间的边

此时已经选择了n-1条边,我们的最小生成树就为


三、代码

Kruskal算法的思想很容易理解,但代码实现还是有些难度的

例如我们该如何判断图中是否带环呢?其实很简单,如果在回填某条边时,边两端的节点位于同一个集合中就说明带环。我们可以使用并查集来判断

关于并查集,可以阅读:

【算法】并查集-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Eristic0618/article/details/138584962接下来写一道例题练练手

P3366 【模板】最小生成树 - 洛谷 | 计算机科学教育新生态

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define debug(x) cout << #x << " = " << x << '\n'
#define INF 0x3f3f3f3f
using namespace std;#define N 5050
#define M 200020int n, m;
int f[N]; //并查集 struct edge
{int a, b, w;
}e[M];int cmp(struct edge a, struct edge b)
{return a.w < b.w;
}int check(int num) //查询某个节点所在集合的根 
{if(f[num] != num) return f[num] = check(f[num]); //压缩路径:将路径上每个节点的父亲都修改为根节点 return num;
}void merge(int a, int b) //合并两个节点所在集合
{if(a == b) //a,b相同 return;f[a] = b; //a的父节点置为b 
} bool same(int a, int b) //判断两个节点是否在同一集合 
{if(f[a] == f[b]) return true; //a,b父节点相同,说明在同一集合 else return false;
}int Kruskal()
{for(int i = 1; i <= n; i++) //初始化并查集 {f[i] = i;}sort(e, e+m, cmp); //按照边权升序排序 int cnt = 0; //统计当前选择了多少条边 int ans = 0; //最小生成树边权和 for(int i = 0;i < m; i++) //遍历所有边 {int a = e[i].a, b = e[i].b, w = e[i].w;a = check(a), b = check(b);if(same(a, b)) //a与b处于同一连通分量continue;//a与b不处于同一连通分量ans += w; //选择该条边merge(a, b); //将a,b所在连通分量合并 cnt++;if(cnt == n-1) //已选择n-1条边 break;} if(cnt < n-1) //边数不足return -1;return ans; 
}void solve()
{cin >> n >> m;for(int i = 0;i < m; i++){int x, y, z;cin >> x >> y >> z;e[i] = {x, y, z}; //存边 }int ans = Kruskal(); //Kruskal算法if(ans == -1) //不连通 cout << "orz" << endl;elsecout << ans << endl;
}signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while(t--)solve();return 0;
}

完.

http://www.dt0577.cn/news/40828.html

相关文章:

  • 网站模板免费下载网页模板电商培训机构
  • 邢台推广网站建设电话公司网站建设全包
  • 想做一个公司的网站去哪可以做网站关键词优化排名软件系统
  • 建立公司网站多少钱关键词优化
  • 上海营销平台网站建设环球军事新闻最新消息
  • 做网站学cdr吗站长统计app软件下载
  • 企业营销型网站做的好百度经验悬赏任务平台
  • 人才网站运营建设 材料营销型网站更受用户欢迎的原因是
  • e建网优化关键词推广
  • 百度推广需要自己做网站吗seo新方法
  • 网站推广用什么方法最好网站seo关键词优化排名
  • 怎么做饲料电商网站抖音搜索seo
  • 东莞做网站要多少钱上海今日头条新闻
  • 开发帮app下载做好的网站怎么优化
  • 可以先做网站后备案么网站设计开发网站
  • 做公益网站需要哪些部门认证此网站不支持下载视频怎么办
  • 珠海正规网站制作系统品牌传播策划方案
  • 营销型网站重要特点是?宁波seo外包平台
  • 设计兼职网站有哪些百度指数分析案例
  • 公司网站用什么系统优化设计七年级下册数学答案
  • 个人网站搭建软件seo网站系统
  • 做网站用不用云服务器站长工具精品
  • 南通建设局网站查询下载百度免费版
  • 最火爆的网络游戏排行榜关键词排名手机优化软件
  • dreamweaver做网站教程口碑营销策划方案
  • 哪有做网站的定单超级外链推广
  • 湖南公众信息网官网seo顾问是什么
  • 可以自己做网站建网站需要什么
  • 网站开发什么自己如何建立网站
  • 发布编程任务平台宁海关键词优化怎么优化