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

如何做试玩类网站郑州网站建设公司哪家好

如何做试玩类网站,郑州网站建设公司哪家好,邯郸专业做网站地方,湛江市建设局官网站在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。解决最小生成树问题一般有两种算法:Kruskal算法和Prim算法。 Kruskal算法 原理:基本思想是从小到大加入边,是个贪心算法。我们将图中的每个边按…

        在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。解决最小生成树问题一般有两种算法:Kruskal算法和Prim算法。

Kruskal算法

原理:基本思想是从小到大加入边,是个贪心算法。我们将图中的每个边按照权重大小进行排序,每次从边集中取出权重最小且两个顶点都不在同一个集合的边加入生成树中。注意:如果这两个顶点都在同一集合内,说明已经通过其他边相连,因此如果将这个边添加到生成树中,那么就会形成环。这样反复做,直到选出n-1条边。时间复杂度为O(m*logm)

算法过程:此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。 具体过程如下所示: 步骤1:先对图中所有的边按照权值进行排序 步骤2:如果当前这条边的两个顶点不在一个集合里面,那么就用并查集的Union函数把他们合并在一个集合里面(也就是把他们放在最小生成树里面),如果在一个并查集里面,我们就舍弃这条边,不需要这条边。 步骤3:一直执行步骤2,知道当边数等于n-1(n为节点个数),那就说明这n个顶点就连合并在一个集合里面了;如果边数不等于顶点数目减去1,那么说明这些边就不连通,即无法构成最小生成树。

代码框架:

int n, m; // n是点数,m是边数 
int p[n + 1]; // 并查集的父节点数组 
struct Edge{ // 存储边  int a, b, w; bool operator< (const Edge &W)const { return w < W.w; } 
}edges[m]; 
​
int find(int x){ // 并查集核心操作 return p[x] == x ? x : p[x] = find(p[x]);
}
void init(){ // 初始化并查集 for(int i = 1; i <= n; i++){p[i] = i;}
}
int kruskal() {sort(edges, edges + m); init();int res = 0, cnt = 0; for (int i = 0; i < m; i++) { // 从m条边选择n-1条边int a = edges[i].a, b = edges[i].b, w = edges[i].w; a = find(a), b = find(b); if (a != b)  { // 如果两个连通块不连通,则将这两个连通块合并p[a] = b; res += w; cnt++; } }if (cnt < n - 1) return INF; return res; 
}

Prim算法

原理:基本思想是从一个结点开始,不断加点。因此该算法可以称为“加点法”,每次迭代选择代价最小的边对应的点,加入到最小生成树中。算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点。时间复杂度为O(n * n + m)。

算法过程:

  1. 用两个集合A{},B{}分别表示找到的点集,和未找到的点集;

  2. 我们以A中的点为起点a,在B中找一个点为终点b,这两个点构成的边(a,b)的权值是其余边中最小的

  3. 重复上述步骤#2,直至B中的点集为空,A中的点集为满

代码框架:

int n; // 节点个数
vector<vector<int>> g(n, vector<int>(n)); // 邻接矩阵,存储所有边
vector<int> dis(n); // 存储其他节点到当前最小生成树的距离
vector<bool> v(n); // 存储每个节点是否加入到最小生成树中
​
// 如果图不连通,则返回INF(值是0x3f3f3f3f), 否则返回最小生成树的树边权重之和
int prim(){const int inf = 0x3f3f3f3f;memset(dis, 0x3f, sizeof dis);int res = 0;for(int i = 0; i < n; i++){int p = -1;for(int j = 0; j < n; j++){if(!v[j] && (p == -1 || dis[j] < dis[p])){p = j;}}if(i && dis[p] == inf){ // dis[p] = inf说明找到的节点与最小生成树不连通,但是当i = 0说明是第一个节点,不考虑连通return inf;}if(i){res += dis[p];}v[p] = true;for(int j = 0; j < n; j++){dis[j] = min(dis[j], g[p][j]); // 与Dijkstra算法的区别}}return res;
}
​

题单

1584. 连接所有点的最小费用 - 力扣(LeetCode)

http://www.yayakq.cn/news/759201/

相关文章:

  • 重庆网站icp备案查询网站开发语言 asp
  • 极路由 做网站大连 商城网站制作公司
  • 营销型网站建设 网络服务东莞娱乐场所开放通知
  • 做外贸网络推广网站自适应网站导航怎么做
  • 车险网站模版sticky wordpress html
  • 网站开发合同缴纳印花税吗小程序商城推广
  • 海南住房和城乡建设厅网站为什么几年前做的网站视频看不了
  • 商城首页网站杭州网络推广网络优化
  • 国外做旅游攻略的网站网站建设的主要工作内容
  • 服务器做网站流程青岛网络服务公司
  • seo 网站title网站备案信息怎么做
  • 做网站买域名怎么弄美橙互联网站管理后台
  • 建设学习网站网站的管理包括
  • 高端网络建站怎样不用代码就能建网站
  • 深圳有几个燃气公司郑州网站排名优化外包
  • 泰安营销型手机网站建设有哪些网站是静态网站
  • php网站设计wordpress导航栏颜色
  • 永康电子商务网站建设莱芜雪野湖风景区
  • 如何做企业网站沂源放心企业网站建设方案报价
  • 中国建设网站轨道自检验收报告表中文书店网站模板
  • 网站需要服务器吗珠宝网站形象设计
  • 吉林省建设工程造价信息网站网站搭建工具
  • 网站设计用处网站整站下载带数据库后台的方法
  • 宁波网站建设的价格表360搜索的网站收录入口
  • 广州网站制作托管下载软件的网站推荐
  • 网站建设税种分类制作营业执照图片手机软件
  • 怎样做模具钢网站利用百度网盘自动播放做视频网站
  • 做易买网网站项目心得体会wordpress api json
  • 淮安企业网站制作大连建设主管部门官方网站
  • 产权交易网站建设方案地方门户网站系统