class ProcessMST { ArrayList mst; ArrayList edges; ArrayList vertices; int connected = 0; int tree = 0; ProcessMST(ArrayList _edges, ArrayList _vertices) { edges = _edges; vertices = _vertices; mst = new ArrayList(); } public boolean run() { if(connected == vertices.size()-1) { return false; } Edge edge = (Edge)edges.remove(0); Vertex v0 = edge.v0; Vertex v1 = edge.v1; if(v0.tree == -1){ if(v1.tree == -1){ v0.tree = tree; v1.tree = tree; tree++; edge.connected = true; mst.add(edge); connected++; } else { v0.tree = v1.tree; edge.connected = true; mst.add(edge); connected++; } } else { if(v1.tree == -1){ v1.tree = v0.tree; edge.connected = true; mst.add(edge); connected++; } else{ if(v0.tree == v1.tree) { } else{ int oldTree = v1.tree; for(int i = 0; i < vertices.size(); i++){ Vertex v = (Vertex)vertices.get(i); if(v.tree == oldTree){ v.tree = v0.tree; } } edge.connected = true; mst.add(edge); connected++; } } } if(connected <= vertices.size()-1) { drawMST(); return true; } else{ return false; } } public String toString() { return "Path: " + mst.size(); } public void drawMST() { smooth(); fill(255, 0, 0, 8); stroke(200, 0, 0, 90); strokeWeight(1); if(mst.size() > 0) { for(int j = 0; j < mst.size(); j++) { Edge e = (Edge)mst.get(j); line(e.v0.x, e.v0.y, e.v1.x, e.v1.y); } } } }