最小生成树(Kruskal算法-边集数组)
以此图为例:
package com.datastruct; import java.util.Scanner; public class TestKruskal { private static class Edge{
public Edge(int begin,int end,int weight){
this.begin = begin;
this.end = end;
this.weight = weight;
} int begin;
int end;
int weight; public String toString() {
return "("+begin+", "+end+") -> "+weight;
}
} private static class Mgraph{
final int MAXEDGE = ; //最大边数
final int MAXVEX = ; //最大顶点数
int numEdges;
int numVertexes;
String vexs[] = new String[MAXVEX]; //顶点数组
Edge edges[] = new Edge[MAXEDGE]; //边集数组 } public static void CreateMGraph(Mgraph g){
int i;
Scanner scanner = new Scanner(System.in); System.out.println("输入 顶点数 和边数 ");
g.numVertexes = scanner.nextInt();
g.numEdges = scanner.nextInt(); System.out.println("输入全部顶点:");
for(i=;i<g.numVertexes;i++){
g.vexs[i] = scanner.next();
} for(i=;i<g.numEdges;i++){
System.out.println("输入边 begin end weight ");
int begin = scanner.nextInt();
int end = scanner.nextInt();
int weight = scanner.nextInt(); g.edges[i] = new Edge(begin,end,weight); } } public static void print(Mgraph g){
int i;
System.out.println("所有顶点:");
for(i=;i<g.numVertexes;i++){
System.out.print(" "+g.vexs[i]);
} System.out.println("\n所有边:");
for(i=;i<g.numEdges;i++){
System.out.println(g.edges[i].toString());
} } public static int Find(int parent[], int f){
while(parent[f] > ){
f = parent[f];
}
return f; } public static void sortByWeight(Mgraph g){ Edge temp;
int i,j;
boolean flag = true;
for(i=;i<g.numEdges- && flag;i++){
flag = false;
for(j=g.numEdges-;j>=i;j--){
if(g.edges[j].weight > g.edges[j+].weight){ temp= g.edges[j];
g.edges[j] = g.edges[j+];
g.edges[j+] = temp; flag = true;
}
}
} }
public static void MiniSpanTree_Kruskal(Mgraph g){ sortByWeight(g);//先根据权值从小到大排序 int i,j,n,m; Edge edge[] = g.edges;
int parent[] = new int[g.MAXVEX]; for(i=;i<g.numVertexes;i++){
parent[i] = ;
}
System.out.println("最小生成树:");
for(i=;i<g.numEdges;i++){
n = Find(parent,edge[i].begin);
m = Find(parent,edge[i].end);
if(n != m){
parent[n] = m;
System.out.println(edge[i].toString());
} } } public static void main(String[] args) {
Mgraph g = new Mgraph();
CreateMGraph(g); // 创建图,边集数组形式
print(g); //打印图的基本信息 MiniSpanTree_Kruskal(g); //找到最小生成树 } }
最小生成树(Kruskal算法-边集数组)的更多相关文章
- 最小生成树kruskal算法、
克鲁斯卡尔(kruskal) //kruskal算法生成最小生成树. //对边集数组Edge结构的定义 typedef struct { int begin; int end; int weight; ...
- 【转】最小生成树——Kruskal算法
[转]最小生成树--Kruskal算法 标签(空格分隔): 算法 本文是转载,原文在最小生成树-Prim算法和Kruskal算法,因为复试的时候只用到Kruskal算法即可,故这里不再涉及Prim算法 ...
- 最小生成树------Kruskal算法
Kruskal最小生成树算法的概略描述:1 T=Φ:2 while(T的边少于n-1条) {3 从E中选取一条最小成本的边(v,w):4 从E中删去(v,w):5 if((v,w)在T中不生成环) { ...
- 求最小生成树——Kruskal算法
给定一个带权值的无向图,要求权值之和最小的生成树,常用的算法有Kruskal算法和Prim算法.这篇文章先介绍Kruskal算法. Kruskal算法的基本思想:先将所有边按权值从小到大排序,然后按顺 ...
- 数据结构之最小生成树Kruskal算法
1. 克鲁斯卡算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路. 具体做法:首先构造一个 ...
- 最小生成树——Kruskal算法理解
背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. Prim算法理解: 如图(摘录自小甲鱼教学视频中的图片) ...
- 实验一-最小生成树Kruskal算法
实验名称 最小生成树算法-Kruskal算法 实验目的 1.掌握并查集的合并优化和查询优化: 2.掌握Kruskal算法. 3.能够针对实际问题,能够正确选择贪心策略. 4.能够针对选择的贪心策略,证 ...
- 最小生成树——kruskal算法
kruskal和prim都是解决最小生成树问题,都是选取最小边,但kruskal是通过对所有边按从小到大的顺序排过一次序之后,配合并查集实现的.我们取出一条边,判断如果它的始点和终点属于同一棵树,那么 ...
- 最小生成树Kruskal算法
Kruskal算法就是把图中的所有边权值排序,然后从最小的边权值开始查找,连接图中的点,当该边的权值较小,但是连接在途中后会形成回路时就舍弃该边,寻找下一边,以此类推,假设有n个点,则只需要查找n-1 ...
随机推荐
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- docker for mac 学习记录
docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...
- 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断
概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
- Javascript正则对象方法与字符串正则方法总结
正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...
- 深入解析Sqlite的完美替代者,android数据库新王者——Realm
写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里给大家补刀,所以我觉得今天不虐狗,继续给大家分享有用的. 如果你比较关心androi ...
- CSS——关于z-index及层叠上下文(stacking context)
以下内容根据CSS规范翻译. z-index 'z-index'Value: auto | <integer> | inheritInitial: autoApplies to: posi ...
- jQuery幻灯片插件autoPic
原文地址:Jquery自定义幻灯片插件 插件效果图: 演示地址:autoPic项目地址:autoPic 欢迎批评指正!
- MFC单文档程序添加HTML帮助支持
1.在App类 构造函数中添加 EnableHtmlHelp(); 2.在Frame类中,添加消息影射: ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFin ...
- 设计模式C#合集--工厂方法模式
简单工厂,代码: public interface ISpeak { public void Say(); } public class Hello : ISpeak { public void Sa ...