import java.util.*; import java.io.*; public class VertexSet implements Iterable { private ArrayList V; private Vertex[] vertex; public VertexSet (int n){ V = new ArrayList(); vertex = new Vertex[n]; } public VertexSet clone(){ int n = 0; VertexSet S = new VertexSet(vertex.length); for (Vertex v : V) S.add((Vertex)v.clone()); return S; } public void add(Vertex v){ if (!V.contains(v)){ V.add(v); vertex[v.getIndex()] = v; v.setLocation(V.size()-1); } } /* private void delete(Vertex v){ if (V.contains(v)){ V.remove(v); vertex[v.getIndex()] = null; for (Integer i : v) vertex[i].removeAdjacent(v); } } */ private void delete(Vertex v){ if (V.contains(v)){ int locn_v = v.getLocation(); Vertex w = V.get(V.size()-1); V.set(locn_v,w); w.setLocation(locn_v); V.remove(V.size()-1); vertex[v.getIndex()] = null; for (Integer i : v) vertex[i].removeAdjacent(v); } } public int colour(Vertex v){ int col = v.colour(); // get minimum colour for vertex v for (int j : v) // for adjacent vertices in P if (vertex[j].hasColour(col)){ // does adjacent j have same colour available? vertex[j].removeColour(col); // remove colour from domain of vertex j vertex[j].incrementSaturation(); // increase saturation of vertex j } return col; } public void remove(int i){delete(vertex[i]);} public void remove(Vertex v){delete(vertex[v.getIndex()]);} public Vertex get(int i){return vertex[i];} public int size(){return V.size();} public boolean isEmpty(){return V.isEmpty();} public Iterator iterator(){return V.iterator();} public String toString(){ return V.size() +" "; } }