最小生成树(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 ...
随机推荐
- Linux中进行单文件内容的复制
文件内容复制的常规方法: 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长 一次性复制文件的内容,这种方法必须首先获取 ...
- [转]利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- 前端学Markdown
前面的话 我个人理解,Markdown就是一个富文本编辑器语言,类似于sass对于css的功能,Markdown也可以叫做HTML预处理器,只不过它是一门轻量级的标记语言,可以更简单的实现HTML ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- 关于 devbridge-autocomplete 插件多选操作的实现方法
目前据我所知最好用的 autocomplete 插件就是 jquery-ui 的 autocomplete 以及 devbridge 的 autocomplete 插件. 我最终选择了 devbrid ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- ASP.NET Core 中文文档 第五章 测试(5.2)集成测试
原文: Integration Testing 作者: Steve Smith 翻译: 王健 校对: 孟帅洋(书缘) 集成测试确保应用程序的组件组装在一起时正常工作. ASP.NET Core支持使用 ...
- dedecms 后台栏目添加图片
前台调用栏目时需要显示图标,整理一下: 第一步:“系统->SQL命令工具” , 插入sql语句 alter table dede_arctype add typeimg varchar() 第二 ...
- vue.js几行实现的简单的todo list
序:目前前端框架如:vue.react.angular,构建工具fis3.gulp.webpack等等...... 可谓是五花八门,层出不穷,眼花缭乱...其实吧只要你想玩还是可以玩玩的..下面是看了 ...
- Java—恶心的java.lang.NumberFormatException解决
项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.NumberFormatException异常 ...