// // explores colour classes newest first // within colour class, oldest vertex first // import java.util.*; class MCX extends MCQ { MCX (int n,int[][]A,int[] degree,int style) { super(n,A,degree,style); } void search(){ cpuTime = System.currentTimeMillis(); nodes = 0; ArrayList C = new ArrayList(n); ArrayList P = new ArrayList(n); orderVertices(P); expand(C,P); } void expand(ArrayList C,ArrayList P){ if (timeLimit > 0 && System.currentTimeMillis() - cpuTime >= timeLimit) return; nodes++; ArrayList> colourClasses = colourSort(C,P); int m = colourClasses.size(); for (int i=0;m + C.size() > maxSize;i++){ ArrayList colourClass = colourClasses.get(i); for (int j=0;j newP = new ArrayList(); for (int k=0;k maxSize) saveSolution(C); if (!newP.isEmpty()) expand(C,newP); C.remove((Integer) v); } m--; } } ArrayList> colourSort(ArrayList C,ArrayList colOrd){ int m = colOrd.size(); ArrayList P = new ArrayList(m); ArrayList> colourClasses = new ArrayList>(); for (int i=0;i colourClass = new ArrayList(); for (int i=0;i