易截截图软件、单文件、免安装、纯绿色、仅160KB

最小生成树 Kruskal算法 java代码实现

/*
*日期:2010-04-18 20:02
*开发者:heroyan
*联系方式:zndxysf@126.com
*功能:无向图最小生成树Kruskal算法实现案例
*/
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
public class Kruskal{
private static int MAX = 100;
private ArrayList<Edge> edge = new ArrayList<Edge>();//整个图的边
private ArrayList<Edge> target = new ArrayList<Edge>();//目标边,最小生成树
private int[] parent = new int[MAX];//标志所在的集合
private static double INFINITY = 99999999.99;//定义无穷大
private double mincost = 0.0;//最小成本
private int n;//结点个数

public Kruskal(){}

public static void main(String args[]){
Kruskal sp = new Kruskal();
sp.init();
sp.kruskal();
sp.print();
}
//初始化
public void init(){
Scanner scan = new Scanner(System.in);
int p,q;
double w;

System.out.println("spanning tree begin!Input the node number:");
n = scan.nextInt();
System.out.println("Input the graph(-1,-1,-1 to exit)");

while(true){
p = scan.nextInt();
q = scan.nextInt();
w = scan.nextDouble();
if(p < 0 || q < 0 || w < 0){
break;
}
Edge e = new Edge();
e.start = p;
e.end = q;
e.cost = w;
edge.add(e);
}

mincost = 0.0;

for(int i = 1; i <= n; ++i){
parent[i] = i;
}
}
//集合合并
public void union(int j, int k){
for(int i = 1; i <= n; ++i){
if(parent[i] == j){
parent[i] = k;
}
}
}
//prim算法主体
public void kruskal(){
//找剩下的n-2条边
int i = 0;
while(i < n-1 && edge.size() > 0){
//每次取一最小边,并删除
double min = INFINITY;
int tag = 0;
Edge tmp = null;
for(int j = 0; j < edge.size(); ++j){
Edge tt = edge.get(j);
if(tt.cost < min){
min = tt.cost;
tmp = tt;
}
}
int jj = parent[tmp.start];
int kk = parent[tmp.end];
//去掉环
if(jj != kk){
++i;
target.add(tmp);
m


相关文档:

java 集成开发环境对比

Eclipse 具体的就不说了,都熟悉了O(∩_∩)O~, 最大的特点:它能接受由java开发者自己编写的开放源代码的插件。 NetBeans NetBeans是sun的唯一一款完全开源的产品,在功能上与Eclipse类似,但也有一些区别。如:它集成了最流行的Ajax,Eclipse需要安装第三方插件,Eclipse鼓励使用swt作为javaGUI库 ......

JAVA面试题及答案(基础题122道)

JAVA相关基础知识
1、面向对象的特征有哪些方面 
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层 ......

Serializable java序列化

Bean Serializable Interface 的接口让BEAN可以串行化,将其变成一个可保存为以后使用的二进制流。当一个BEAN被系列化到磁盘上或者其他任何地方,其状态被保存起来,其中的属性值也不会改变。在BEAN的规范中,JSP并没有要求BEAN实现Serializable接口。但是,如果您希望自己控制您所创建的组件的serialization进程,或者您想 ......

JAVA JDBC(MySQL)驱动源码分析(四)

connect方法是java.sql.Driver接口中定义的方法,如果连接的数据库不同,那么为不同的数据库编写JDBC驱动将变得很灵活,实现Driver接口即可。连接数据库时首先得装载JDBC驱动,也就是调用 Class.forName(“com.mysql.jdbc.Driver”)方法,在第一篇中已经列出mysql jdbc Driver类的源码,此类继承NonRegisteringD ......

★★★★★这几天的java学习

      这几天的学习 让我感到发懵,老师讲的很多,自己就根本无法去思考,只能一个劲的往里听,自己代码也不怎么会,老师讲过的能有个印象, 不过今天还好,讲到了Java基础加强,稍微感觉好点,并不是很难理解了,今天就开始今天课程的复习了,要想进步,只有自己艰苦努力啦!
    确 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号