prim的时间复杂度java中_图的最小生成树(Prim、Kruskal)

package图;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.Iterator;importjava.util.List;importjava.util.Stack;public classGraph {public static List vertexList=new ArrayList();public static List EdgeQueue=new ArrayList();public static List newVertex=new ArrayList();public static List newEdge=new ArrayList();public static voidbuildGraph(){

Vertex a=new Vertex("a");

vertexList.add(a);

Vertex b=new Vertex("b");

vertexList.add(b);

Vertex c=new Vertex("c");

vertexList.add(c);

Vertex d=new Vertex("d");

vertexList.add(d);

Vertex e=new Vertex("e");

vertexList.add(e);

Vertex f=new Vertex("f");

vertexList.add(f);

addEdge(a, b,3);

addEdge(a, e,6);

addEdge(a, f,5);

addEdge(b, a,3);

addEdge(b, c,1);

addEdge(b, f,4);

addEdge(c, b,1);

addEdge(c, d,6);

addEdge(c, f,4);

addEdge(d, c,6);

addEdge(d, f,5);

addEdge(d, e,8);

addEdge(e, d,8);

addEdge(e, f,2);

addEdge(e, a,6);

addEdge(f, a,5);

addEdge(f, b,4);

addEdge(f, c,4);

addEdge(f, d,5);

addEdge(f, e,2);

}public static void addEdge(Vertex start,Vertex end,intvalue){

Edge e=newEdge(start,end,value);

EdgeQueue.add(e);

}public static booleancontainVertex(Vertex v){for(Vertex each:newVertex)

{if(each.value.equals(v.value))return true;

}return false;

}public static voidprim(){

buildGraph();

Vertex start=vertexList.get(0);

newVertex.add(start);for(int i=0; i

{

Vertex temp=newVertex(start.value);

Edge tempEdge=new Edge(start, start, 1000);for(Vertex v:newVertex)

{for(Edge e:EdgeQueue)

{if(e.start==v && !containVertex(e.end))

{if(tempEdge.value>e.value)

{

tempEdge=e;

temp=e.end;

}

}

}

}

newVertex.add(temp);

}

Iteratori=newVertex.iterator();while(i.hasNext())

{

Vertex v=i.next();

System.out.print(v.value+" ");

}

}public static voidkruskal(){

buildGraph();

sort();

}public static voidsort(){

Comparatorcomparator=new Comparator(){

@Overridepublic intcompare(Edge e1, Edge e2) {//TODO Auto-generated method stub

return e1.getValue()-e2.getValue();

}

};

Collections.sort(EdgeQueue,comparator);

}public static voidmain(String[] args) {

prim();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值