java带权连通图上最小权边,连通图最小生成树的算法及实现
连通图的最小生成树
生成树定义:
无向连通图G的极小连通子图,称为它的生成树。(n个顶点,n-1条边)
考虑一下下面这个图
上图是一个完全图,它的生成树不是唯一的,我们列出最特殊的两种情况
上面2个图都是第一个完全图的生成树,但是2者是完全不同的。
按照深度优先遍历生成的生成树,称为深度优先生成树
按照广度优先遍历生成的生成树,称为广度优先生成树
非连通图的生成森林,概念比较简单,无非就是非连通图的极大连通子图和生成树的概念叠加
最小生成树
图G是带权的无向连通图,生成树上个边权值之和称为生成树的代价,代价最小的生成树称为最小生成树。
最小生成树的生成算法
Prim算法
现有连通图G=(V, E),其最小连通图TG=(TV, TE)。
初始状态下:V = {V0, V1, V2 ... Vn}; TV = {}
从V当中任选一顶点,插入TV,V = {V0, V1, V2 ... Vn}; TV = {V0}
找连接TV和V-TV这两个集合的权值最小的边,插入TE,并把该边2顶点当中原本不属于TV的顶点加入TV;
重复上一步骤
知道V = TV
下面是java实现,首先我们需要修改一下之前的生成图的代码,我们生成了一棵7个顶点的完全图,每一条边的权值是100以内的随机数。
Graph graph = new Graph();
String nodeNames[] = {"aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg"};
for (String s : nodeNames) {
graph.nodes.add(new Node(s));
}
graph.arcs = new int[nodeNames.length][nodeNames.length];
Random ra = new Random();
for (int i = 0; i < graph.nodes.size(); i ++){
for (int j = 0; j < graph.nodes.size(); j ++){
if (i != j){
graph.arcs[i][j] = ra.nextInt(100) + 1;
}
}
}
然后是最小生成树的Prim算法实现,解释一下,首先创建一个二维数组表示边,把空间都分配好,只等着往里面填数就行。然后是一个TreeMap对象,来保存顶点,之所以用TreeMap,是为了保证新图的顶点顺序和原图是一致的。剩下的基本就是跟前面算法描述的差不多,大家对着看就行,没什么太难的地方。
public Graph getMinTree(){
int newArcs[][] = new int[this.nodes.size()][this.nodes.size()];
Map newNodes = new TreeMap();
newNodes.put(0, this.nodes.get(0));
while(newNodes.size() != this.nodes.size()){
int minWeight = 99999;
int minI = -1;
int minJ = -1;
for(int i : newNodes.keySet()){
for (int j = 0; j < this.nodes.size(); j ++){
if (i != j && !newNodes.containsKey(j)){
if (this.arcs[i][j] < minWeight){
minWeight = this.arcs[i][j];
minI = i;
minJ = j;
}
}
}
}
newNodes.put(minJ, this.nodes.get(minJ));
newArcs[minI][minJ] = minWeight;
newArcs[minJ][minI] = minWeight;
}
Graph res = new Graph();
res.arcs = newArcs;
res.nodes.addAll(newNodes.values());
return res;
}
下面有一次测试的输出,2个图,分别是原图的所有权值信息,另一个是最小生成树的权值信息
然后还可以用连通图的dfs算法检查一下。
Kruskal算法
先将所有边按照权值,从小到大排序
依次访问各边,如果生成回路,则舍弃,否则加入生成树,同时将该边的另一顶点加入生成树
直到所有顶点被加入
java实现,省略。
java带权连通图上最小权边,连通图最小生成树的算法及实现相关推荐
- Java数据结构与算法:无向图,有向图,带权图,图的遍历,最小生成树
文章目录 无向图 有向图 带权图 图的遍历 广度优先遍历 深度优先遍历 最小生成树 无向图 前面了解到树是有单一根结点的非线性结构,图(graph)也是一种非线性结构,其中的结点可以与许多其他的结点相 ...
- 最小权点覆盖集 与 最大权独立集
最小权点覆盖集 一.定义 什么是点覆盖集呢?就是图中所有点的一个子集,首先他是一个点集,然后图中所有边的两个端点的其中一个都在这个点集中,就是说这个点集中包含了所有边的至少一个端点,这个点集就覆盖了所 ...
- HOJ 2739 The Chinese Postman Problem 带权有向图上的中国邮路问题
[题目大意] 带权有向图上的中国邮路问题:一名邮递员需要经过每条有向边至少一次,最后回到出发点,一条边多次经过权值要累加,问最小总权值是多少.(2 <= N <= 100, 1 < ...
- 带权二分图匹配(最小费用最大流) 8.2牛客暑期多校训练营五 E
E.room | 时间限制:1 秒 | 内存限制:256M Nowcoder University has 4n students and n dormitories ( Four students ...
- HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法
HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...
- HOJ 2739 网络流【带权有向图上的中国邮路问题】
[带权有向图上的中国邮路问题] #include<cstring> #include<cstdio> #include<algorithm> #include< ...
- POJ-2195 Going Home 最小权值匹配
题意:给定一个网格图,图上有一些人要到一些房子当中去,人和房子的数量一样多,人和房子的曼哈顿距离作为行走的开销,问所有人走到房子中的最小开销. 解法:将人和房子之间两两之间建立带权边,权值为曼哈顿距离 ...
- 小A与欧拉路 (树加边求最小权值欧拉路+树的直径)
链接:https://ac.nowcoder.com/acm/contest/369/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...
- pku The Windy's KM最小权匹配 or 最小费用最大流
http://poj.org/problem?id=3686 题意: 给定n个玩具,有m个车间,给出每个玩具在每个车间的加工所需的时间mat[i][j]表示第i个玩具在第j个车间加工所需的时间,规顶只 ...
最新文章
- 洛谷P3252 [JLOI2012]树
- 20T数据、百万奖金,同济和武大摘得开放数据创新应用大赛桂冠!
- 纯css实现毛玻璃效果
- hdu4020简单想法题
- windows环境下安装scrapy框架报错问题--最快捷有效的解决方案
- pandas 或者字段值_pandas用法总结
- 无人驾驶属于计算机科学吗,无人驾驶的车辆如何识别物体?科研笔记,原来车辆的眼睛是它...
- android 将图片路径转二进制,将图像转换为二进制图像中的android
- python matplotlib模块教程_Python中的Matplotlib模块入门教程
- 6.828 - lab3
- java并发编程实战看哪几章,附源代码
- 计算机模拟专业委员会,中国化工学会过程模拟及仿真专业委员会成立
- 自动驾驶技术(5)视觉与激光雷达对比
- 天镜漏洞扫描报告HTML转Excel格式Python脚本
- 坤宝德万达打造命运共同体万达茂天樾之夜.时光发声全国巡回演唱会南宁站圆满结束
- css中滑轮中是如何做的,横向的网页如何实现鼠标滑轮横向移动?_html/css_WEB-ITnose...
- 通信安全重重考验,阿里云通信如何打造企业级“安全感”?
- RLC振荡原理与RC Snubber吸收电路
- linux硬件时间与系统时间不同步,Linux系统时钟和硬件时钟不一致
- 铁、髓鞘和大脑:神经影像遇见神经生物学
热门文章
- 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。
- arduinowin7_win7系统64位系统安装Arduino uno R2 驱动的方法
- mysql 5.1版本无innodb trx_MySQL 5.7: Innodb 事务子系统优化-阿里云开发者社区
- GoLand中的指针操作 * 和
- Spring boot 项目目录结构详解
- 四种依恋类型_依恋关系的研究
- Python小白的数学建模课-17.条件最短路径算法
- Python入门基础篇(一)列表,详细实用,简单易懂!!!!
- 山东鲁能轨道智能巡检机器人_温湿度传感器在轨道巡检机器人中的应用
- 百度贴吧发帖软件_贴吧自动发帖软件