// // visit colour classes in increasing size order, tie breaking on age // visit vertices in colour class, oldest first // import java.util.*; class MCV extends MCQ { Stack[] colourClassStack; MCV (int n,int[][]A,int[] degree,int style) { super(n,A,degree,style); } void search(){ cpuTime = System.currentTimeMillis(); nodes = 0; colourClassStack = new Stack[n+1]; ArrayList C = new ArrayList(n); ArrayList P = new ArrayList(n); for (int i=0;i<=n;i++) colourClassStack[i] = new Stack(); 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(); int minSize = m; int maxSize = 0; int size = 0; ArrayList P = new ArrayList(m); for (int i=0;i colourClass = new ArrayList(); for (int i=0;i> colourClasses = new ArrayList>(); for (int i=minSize;i<=maxSize;i++) while (!colourClassStack[i].isEmpty()) colourClasses.add((ArrayList)colourClassStack[i].pop()); return colourClasses; } }