java 最小生成树_java实现最小生成树的prim算法和kruskal算法

public class kruskal {

/**

* @author 刘雁冰

* @date 2015-02-13 20:23

*/

/*

* Max:定义顶点数组的最大值

* edge:链表edge,存储构造的Edge对象

* target:链表trget,存储最终得到结果的Edge对象

* parent:存储顶点信息的数组

* n:顶点数

*/

int Max=100;

ArrayListedge=new ArrayList();

ArrayListtarget=new ArrayList();

int[] parent=new int[Max];

Float TheMax=Float.MAX_VALUE;

int n;

public void init(){

/**

* p:起始顶点

* q:结束顶点

* w:边的权值

* n:顶点个数

*/

Scanner scan =new Scanner(System.in);

int p,q;

double w;

System.out.println("请输入结点的个数:");

n=scan.nextInt();

System.out.println("按照'A,B,C'的格式输入边与边的信息,ABC分别代表边的起始顶点,结束顶点,权值(输入-1 -1 -1结束输入):");

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.weight=w;

edge.add(e);

}

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;

}

}

public void kruskal(){

int i=0;                 //顶点

while(i0){       //如果只有一条边或者没有边跳出

double min=Double.MAX_VALUE;

Edge temp=null;

for(int j=0;j

Edge tt=edge.get(j);

if(tt.weight

min=tt.weight;

temp=tt;

}

}

//构造一棵树

int jj=parent[temp.start];

int kk=parent[temp.end];

if(jj!=kk){

++i;                 //以end作为下一条边的start,寻找下一条边

target.add(temp);           //将找到的边放入目标集合中

union(jj,kk);

}

edge.remove(temp);           //将临时边删除

}

System.out.println("最小生成树的路径是:");

for(int k=0;k

Edge e=target.get(k);

System.out.println(e.start+"-->"+e.end);

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

kruskal kr=new  kruskal();

kr.init();

kr.kruskal();

}

}

/*

* start:起始顶点

* end:结束顶点

* weight:权值

*/

class Edge{

public int start;

public int end;

public double weight;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值