普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法
图是一种基础又重要的数据结构,图的生成树是图的一个极小连通子图。最小生成树是无向连通网的所有生成树中边的权值之和最小的一棵生成树。求图的最小生成树可以牵引出很多经典的题目,例如在N个城市之间建立通讯网络,问怎样最省经费(不同城市之间的联系网的费用不同,也即是边上的权值不同)。
(1) U={u0}(u0属于V), TE={ }
(2) 在所有uU,vV-U的边(u,v)E 中找一条代价最小的边(u0,v0)并入集合TE, 同时v0并入U,
(3) 如果U≠V,转(2) (直到U=V为止)
最后:TE中必有n-1条边,则T=(V,{TE})为N的最 小生成树。
struct{VerTexType adjvex; //最小边在U中的那个顶点ArcType lowcost; //最小边上的权值
}closedge[MVNum];
#include<iostream>
using namespace std;typedef struct
{int cost;char v1,v2;
}Edge;char temp[100];
int flag=0;
int check(char k,int m)
{int i;for(i=0;i<m;i++){if(temp[i]==k)return 1;}return 0;
}int main()
{int i,j,n,m;Edge edges[100],t;cout<<"输入顶点数和边数:";cin>>m>>n;cout<<"依次输入多组v1 v2 cost:"<<endl;for(i=0;i<n;i++){cin>>edges[i].v1>>edges[i].v2>>edges[i].cost;}for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(edges[i].cost>edges[j].cost) { t=edges[i];edges[i]=edges[j];edges[j]=t;} } } for(i=0;i<n;i++){if(check(edges[i].v1,m)==0 || check(edges[i].v2,m)==0){cout<<edges[i].v1<<"---"<<edges[i].v2<<" "<<edges[i].cost<<endl;if(check(edges[i].v1,m)==0){temp[flag]=edges[i].v1;flag++;}if(check(edges[i].v2,m)==0){temp[flag]=edges[i].v2;flag++;}}}return 0;
}
普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法相关推荐
- 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)
目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...
- 算法之克鲁斯卡尔(Kruskal)算法
克鲁斯卡尔(Kruskal)算法 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路 具体做法:首先 ...
- 【算法】克鲁斯卡尔 (Kruskal) 算法
目录 1.概述 2.代码实现 2.1.并查集 2.2.邻接矩阵存储图 2.3.邻接表存储图 2.4.测试代码 3.应用 本文参考: <数据结构教程>第 5 版 李春葆 主编 1.概述 (1 ...
- 【数据结构与算法】克鲁斯卡尔(Kruskal)算法
一,应用场景 公交站问题 1)某城市新增7个站点(A,B,C,D,E,F,G),现在需要修路把7个站点连通 2)各个站点的距离用边线表示(权),比如 A - B距离12公里 3)问:如何修路保证各个站 ...
- 一文带你弄懂普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法
Prim算法 Prim算法用于构造最小生成树,且适用于稠密图. 基本思想 : 归并顶点 设连通网络 N = { V, E } 从某顶点 u0 出发, 选择与它关联的具有最小权值的边(u0, v), 将 ...
- 普里姆算法(Prim)和克鲁斯卡尔(Kruskal)算法
普里姆算法(Prim)和克鲁斯卡尔(Kruskal)算法 普里姆算法的基本思想: 取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w.添加顶点w的条件为:w 和已在生成树上的顶点v ...
- 【数据结构】克鲁斯卡尔(Kruskal)算法 —PK— 普里姆(Prim)算法
目录 一.克鲁斯卡尔(Kruskal)算法 二.普里姆(Prim)算法 三.两个算法对比 求图的最小生成树的典型算法: 克鲁斯卡尔(Kruskal)算法 普里姆(Prim)算法 注:考虑问题的出发点相 ...
- 算法:通过克鲁斯卡尔(Kruskal)算法,求出图的最小生成树
之前我给大家分享过用普利姆(Prim)算法来求出图的最小生成树(点我去看看),今天我再给大家分享一个也是求图的最小生成树的克鲁斯卡尔(Kruskal)算法 克鲁斯卡尔(Kruskal)算法,就相当于先 ...
- 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
最新文章
- WebSocket 集群解决方案
- 加强版Redis,又一款国产高性能KV存储数据库开源了!
- (20/24) webpack实战技巧:watch实现热打包和添加代码备注
- javascript 垃圾回收机制--分代式垃圾回收机制
- mysql分库分表事务控制_数据库分库分表之后,你是如何解决事务问题?
- js高级—tab栏切换(面向对象做法)
- 深入浅出VC++串口编程之基于Win32 API
- Mysql连接失败报Received fatal alert: protocol_version问题解决
- 发现Tensorflow
- 国内首家VR虚拟现实主题公园即将在北京推出
- 笔记:Chrome 对浏览器的改进
- java高手之路上的必备基础知识
- HDU-1013-Digital root
- Python_将conda里的环境导入到pychram中
- 2003服务器系统驱动精灵,万能驱动助理 e驱动 6.1.2014.0516 for XP/win2003 32位专版
- 在Qt中解决word书签中只能从其后面插入文本的问题
- 网络-DNS域名系统详解与DNS攻击
- 微信小店二次开发_怎么吧微信小店装修的更好看
- 计算机uc,UC浏览器
- 把圆形放入矩形的Packing问题