Kruskal’s algorithm is an algorithm in graph theory that finds a minimum spanning tree for a connected weighted graph. This means it finds a subset of the edges that forms a tree that includes every vertex, where the total weight of all the edges in the tree is minimized. If the graph is not connected, then it finds a minimum spanning forest (a minimum spanning tree for each connected component). Kruskal’s algorithm is an example of a greedy algorithm.

LinkedList<PQEntry> kruskalEdges = new LinkedList<PQEntry>(); // List of entries after processing Algo
Iterator<PQEntry> it2=predefEdges.iterator();
while(it2.hasNext()){
PQEntry edge = it2.next();

String nodeA = edge.getNodeA();
String nodeB = edge.getNodeB();

// finding if theres any Entry with same Node
PQEntry entryA = findEntry(nodeA);
PQEntry entryB = findEntry(nodeB);

// Kruskal Algo Logic [START]
if(entryA == null){
kruskalEdges.add(edge);
}else{
if(entryB == null){
kruskalEdges.add(edge);
}else {
if(entryA != entryB){
if(edge.getWeight() < entryA.getWeight() && edge.getWeight() < entryB.getWeight()){
if(entryA.getWeight() < entryB.getWeight()){
kruskalEdges.remove(entryB);
}else{
kruskalEdges.remove(entryA);
}
kruskalEdges.add(edge);
}
if(edge.getWeight() < entryA.getWeight() && edge.getWeight() > entryB.getWeight()){
kruskalEdges.remove(entryA);
kruskalEdges.add(edge);
}
if(edge.getWeight() < entryB.getWeight() && edge.getWeight() > entryA.getWeight()){
kruskalEdges.remove(entryB);
kruskalEdges.add(edge);
}
}
}
}
// Kruskal Algo Logic [END]
}

private PQEntry findEntry(String node){
Iterator<PQEntry> it=kruskalEdges.iterator();
while(it.hasNext()){
PQEntry temp = it.next();
if(temp.getNodeA().equalsIgnoreCase(node)){
return temp;
}
if(temp.getNodeB().equalsIgnoreCase(node)){
return temp;
}
}
return null;
}