/** Does not handle Graphs of 1 or fewer nodes */ public Graph kruskal(Graph g) { boolean add = false; Graph mst = new Graph(); // initialize graph Vector edges = g.getEdges(); // get edges Collections.sort(edges); // sort edges // find mst for (int i = 0; i < edges.size(); ++i) { Edge edge = (Edge) edges.get(i); // get edge KNode[] ends = edge.getEnds(); // get ends if (!mst.containsNode(ends[0])) { mst.addNode(ends[0]); // check for first end add = true; } if (!mst.containsNode(ends[1])) { mst.addNode(ends[1]); // check other end add = true; } if (add) // if either end is new add edge { mst.addEdge(edge); add = false; } else // ensure trees are connected if nodes are contained { if (!mst.pathBetween(ends)) mst.addEdge(edge); } } return mst; }