java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例

所谓有权图,就是图中的每一条边上都会有相应的一个或一组值。通常情况下,这个值只是一个数字

如:在交通运输网中,边上的权值可能表示的是路程,也可能表示的是运输费用(显然二者都是数字)。不过,边上的权值也有可能是其它东西,比如说是一个字符串,甚至是一个更加复杂的数据包,里面集合了更多的数据

克鲁斯卡尔算法的核心思想是:在带权连通图中,不断地在边集合中找到最小的边,如果该边满足得到最小生成树的条件,就将其构造,直到最后得到一颗最小生成树。

克鲁斯卡尔算法的执行步骤:

第一步:在带权连通图中,将边的权值排序;

第二步:判断是否需要选择这条边(此时图中的边已按权值从小到大排好序)。判断的依据是边的两个顶点是否已连通,如果连通则继续下一条;如果不连通,那么就选择使其连通。

第三步:循环第二步,直到图中所有的顶点都在同一个连通分量中,即得到最小生成树。

关于有权图的实现,看如下实例:

3c50f9c6f5fc3434192726c94a227c60.png

Graph:

package kruskal;

public class Graph {

final int max=100;

/*

* 顶点节点

*/

public class VexNode{

int adjvex;

int data;

}

VexNode[] vexNodes;

int[] thevexs;

//顶点集合

int[][] edges = new int[max][max];

//边集合

/*

* 创建图

*/

public void createGraph(Graph graph,int[][] A,int[] vexs) {

thevexs=vexs;

for (int i = 0; i < vexs.length; i++) {

for (int j = 0; j < vexs.length; j++) {

graph.edges[i][j] = A[i][j];

}

}

}

/*

* 输出图

*/

public void printGraph(Graph graph) {

for (int i = 0; i < graph.thevexs.length; i++) {

for (int j = 0; j < graph.thevexs.length; j++) {

//没有路径则输出/

if (graph.edges[i][j]==-1) {

System.out.printf("%4s","/");

} else {

System.out.printf("%4d",graph.edges[i][j]);

}

}

System.out.println("\n");

}

}

}

算法:

package kruskal;

public class KruSkal {

public class Edge{

int start;

int end;

int weight;

}

public void SortEdge(Edge[] E,int e) {

Edge temp;

int j;

for (int i = 0; i < e; i++) {

temp=E[i];

j=i-1;

while (j>=0&&temp.weight

E[j+1] = E[j];

j--;

}

E[j+1] = temp;

}

}

public KruSkal(Graph graph) {

int i,j,u1,v1,sn1,sn2,k;

int[] vset = new int[100];

Edge[] E = new Edge[100];

k=0;

for (i=0;i

for (j=0;j<=i;j++) {

E[k] = new Edge();

if (graph.edges[i][j]>0) {

E[k].start=i;

E[k].end=j;

E[k].weight=graph.edges[i][j];

k++;

}

}

}

SortEdge(E, k);

for (i=0;i

vset[i]=i;

}

k=1;

j=0;

while (k

u1=E[j].start;

v1=E[j].end;

sn1=vset[u1];

sn2=vset[v1];

if (sn1!=sn2) {

System.out.printf("(%d,%d),权值:%d",u1,v1,E[j].weight);

System.out.println("\n");

k++;

for (i=0;i

if (vset[i]==sn2) {

vset[i]=sn1;

}

}

}

j++;

}

}

}

测试类:

package kruskal;

public class Test {

public static void main(String[] args) {

int[] vexs = {0,1,2,3,4};

int[][] A = {

{0,1,3,4,7},

{1,0,2,-1,-1},

{3,2,0,5,8},

{4,-1,5,0,6},

{7,-1,8,6,0}

};

Graph graph = new Graph();

graph.createGraph(graph, A, vexs);

graph.printGraph(graph);

KruSkal kruSkal = new KruSkal(graph);

}

}

总结

以上就是本文关于Java语言基于无向有权图实现克鲁斯卡尔算法代码示例的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编尽力为您答复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[原]一步一步自己制作弹出框

说到javascript弹出框的制作,将其实现步骤分开&#xff0c;其实很容易。下面&#xff0c;将拆分页面弹出框的制作步骤。首先&#xff0c;准备编辑工具(废话)&#xff0c;其实&#xff0c;您可以使用notepad..嘿嘿。弹出框的组成结构&#xff1a; 1.一个页面遮罩层。 2.一个di…

那些你从未见过的神奇物理化学实验,今天全给你整理了!

全世界只有3.14 % 的人关注了爆炸吧知识1.电荷吸引水流2.比空气重的六氟化硫六氟化硫&#xff08;SF6&#xff09;&#xff0c;法国两位化学家Moissan和Lebeau于1900年合成的人造惰性气体&#xff0c;具有良好的电气绝缘性能及优异的灭弧性能&#xff0c;是一种优于空气和油之间…

Makefile 使用总结

1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些…

学C#的感想

我学C#已经一个学期了&#xff0c;却发现自己对C#的了解只是一点皮毛而已&#xff0c;根本什么都不能做。自己也试过去编写一些写程序&#xff0c;但就是只会那些简单的&#xff0c;一旦遇到复杂点的程序&#xff0c;就是狗咬乌龟—无从下口了。现在回想&#xff0c;都不知道自…

ASP.NET Core使用Middleware有条件地允许访问路由

问题有时&#xff0c;我们可能在Web API中包含一些具有调试功能的请求。比如我们上次的文章中“晕了&#xff01;这个配置值从哪来的&#xff1f;”使用的获取配置值的功能&#xff1a;endpoints.MapGet("/test2/{key:alpha}", async context > {var key context…

java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

代表任意一个字符&#xff0c;*代表任意一串字符&#xff0c;判断两个字符串是否匹配&#xff1f; 如题&#xff0c;代表任意一个字符&#xff0c;*代表任意一串字符&#xff0c;判断两个字符串是否匹配&#xff1f;假如a字符串为&#xff1a;as*bncb,b字符串为asdfgvbbnchb,则…

如何用最低的成本教育出最棒的孩子?看完这些公众号你就知道了

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

Virtualbox 无缝整合linux和windows双系统

一直以来&#xff0c;为了使用公司规定的内部通信工具RTX, 而不得不在ubuntu上安装一个virtualbox以运行RTX, 但是由于是运行在虚拟机里面&#xff0c;所以经常不能及时的回复同时的消息&#xff0c;而造成沟通的延迟。 所以就想着&#xff0c;能不能及时的在ubuntu上面看到…

archlinux yaourt安装 以及出错细节 database file for archlinuxfr does not exist.

archlinux yaourt安装 但一直报错如下&#xff1a; :: Synchronizing package databases... core is up to date   extra is up to date   community is up to date  error: failed retrieving file archlinuxfr.db from repo.archlinuxcn.org : The requested URL …

WCF分布式开发常见错误(10):套接字连接中断,The socket connection was aborted

&#xff08;使用Windows Service作为宿主的时候也会出现这样的情况&#xff0c;搜索的&#xff09; 我们这里是自定义托管宿主&#xff0c;在进行WCF编程开发过程时&#xff0c;使用NetTcpBinding绑定协议&#xff0c;作为通讯协议&#xff0c;可能会引发这样的异常&#xff0…

聊一聊对外API接口的存活检查可以怎么做

背景 公司内部的API接口一般会分为两大类&#xff0c;一类是直接暴露在公网可以访问的&#xff0c;一类是只能在局域网内访问的。暴露在公网的一般就是业务网关以及一些和第三方公司有着某些合作&#xff0c;从而进行数据交互的接口。检查API接口是否存活&#xff0c;第一反应应…

mysql slave 1032_修复mysql slave复制1032错误

一台从库出现1032错误&#xff0c;那1032是什么错误&#xff0c;我们看一下[rootBLAVDP021 ~]# perror 1032MySQL error code 1032 (ER_KEY_NOT_FOUND): Cant find record in %-.192s简单说&#xff0c;就是在从库上找不到相应的记录,同时在show slave status\G;中有相关输出&a…

各种机械原理动态图,看完脑洞大开,绝对涨姿势!

全世界只有3.14 % 的人关注了爆炸吧知识1.钥匙开锁2.撬锁3.汽车换挡4.手枪上膛发射5.炮弹发射原理6.手雷爆炸7.洗衣机8.缝纫机9.心脏10. 近视眼手术&#xff1a;原理其实很简单&#xff0c;就是把角膜削成一个“隐形眼镜”。11.零钱分类12.吹号转载来源&#xff1a;物理好教师部…

HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋题目地址: http://acm.hdu.edu.cn/showproblem.php?pid1875题目描述:畅通工程再续Time Limit: 2000/1000MS (Java/Others) Memory Limit: 32768/32768K (Java/Others)Total Submission(s): 3822Accepted Subm…

CSharp设计模式读书笔记(10):装饰模式(学习难度:★★★☆☆,使用频率:★★★☆☆)...

装饰模式(Decorator Pattern)&#xff1a; 动态地给一个对象增加一些额外的职责&#xff0c;就增加对象功能来说&#xff0c;装饰模式比生成子类实现更为灵活。 模式角色与结构&#xff1a; 示例代码&#xff1a; using System; using System.Collections.Generic; using Syste…

ShardingCore 如何呈现“完美”分表

这篇文章是我针对efcore的分表的简单介绍,如果您有以下需求那么可以自己选择是否使用本框架,本框架将一直持续更新下去&#xff0c;并且免费开源为.net生态做贡献,如果您觉得不错那么请帮忙点个star谢谢&#xff0c;框架地址[sharding-core](https://github.com/xuejmnet/shard…

使用javascript oop开发滑动(slide) 菜单控件

这里使用原生的javascript&#xff0c;用面向对象的方式创建一个容易维护使用方便的滑动菜单&#xff0c;调用方式如下&#xff1a;var$sliding document.getElementById("silding");vars1 newSliding();s1.commands $sliding.getElementsByTagName("dt");…

这段代码什么意思啊?

这段代码什么意思啊? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiDB/html/delphi_20061217214802252.htmlprocedure TForm3.RadioButton3Click(Sender: TObject); begin ADOTable1.refresh; with ADOTable1 do try disablecontrols; filte…

他毕业于北师大,编写了我国首套数学教材,陈景润华罗庚都崇拜他

全世界只有3.14 % 的人关注了爆炸吧知识要说起我国著名的数学家&#xff0c;很多人会想到陈景润、华罗庚等人&#xff0c;这些大数学家为我国数学研究做出了卓越贡献&#xff0c;也深深影响了很多人。那么&#xff0c;像陈景润、华罗庚这些大数学家&#xff0c;他们学习数学有受…

用多媒体库 Bass.dll 播放 mp3 [8] - 实时显示左右声道的峰值

为什么80%的码农都做不了架构师&#xff1f;>>> 本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, ComCtrls;typeTForm1 class(TForm)OpenDialog1: TOpe…