public class KruskalTest {
@Test
public void test(){
PriorityQueue<Edge> queue = new PriorityQueue<>();
Graph g = Graph.build();
for(Edge e : g.getEdges()){
queue.offer(e);
}
Edge edge = null;
UF uf = new UF(6);
List<Edge> res = new ArrayList<>();
while((edge = queue.poll())!=null){
if(!uf.isConnected(edge.getFromVertex(), edge.getToVertex())){
uf.union(edge.getFromVertex(), edge.getToVertex());
res.add(edge);
System.out.println(edge);
//System.out.println(queue.size());
}
}
}
}
public class Graph {
private String[] vertexs;
private Edge[] edges;
public static Graph build() {
Graph g = new Graph();
g.vertexs = new String[] { "A", "B", "C", "D", "E", "F" };
g.edges = new Edge[] { Edge.build(0, 1, 1), Edge.build(0, 2, 1), Edge.build(0, 5, 1), Edge.build(1, 2, 2),
Edge.build(2, 3, 3), Edge.build(3, 4, 4), Edge.build(4, 5, 5)};
/* g.edges = new Edge[] { Edge.build(0, 1, 80), Edge.build(0, 3, 100), Edge.build(0, 5, 20), Edge.build(1, 2, 90),
Edge.build(2, 3, 10), Edge.build(2, 5, 70), Edge.build(3, 4, 60), Edge.build(4, 5, 40) };
*/ return g;
}
public Edge[] getEdges() {
return edges;
}
public String[] getVertexs() {
return vertexs;
}
}
public class Edge implements Comparable<Edge>{
private int fromVertex;
private int toVertex;
private int weight;
public int getFromVertex() {
return fromVertex;
}
public void setFromVertex(int fromVertex) {
this.fromVertex = fromVertex;
}
public int getToVertex() {
return toVertex;
}
public void setToVertex(int toVertex) {
this.toVertex = toVertex;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public static Edge build(int from,int to,int weight){
Edge e = new Edge();
e.fromVertex = from;
e.toVertex = to;
e.weight = weight;
return e;
}
@Override
public String toString(){
return JSON.toJSONString(this);
}
@Override
public int compareTo(Edge edge) {
return Integer.compare(this.weight, edge.weight);
}
}
kruskal算法
最新推荐文章于 2024-06-15 09:15:00 发布