// // explores colour classes newest first // within colour class, newest vertex first // MCYrev = MCSa // import java.util.*; class MCZ extends MCYrev { MCZ (int n,int[][]A,int[] degree,int style) { super(n,A,degree,style); } 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(m-1); for (int j=0;j0;j--){ int v = colourClass.get(j-1); C.add(v); ArrayList newP = new ArrayList(); for (int k=0;k maxSize) saveSolution(C); if (!newP.isEmpty()) expand(C,newP); C.remove((Integer) v); //P.remove((Integer) v); } m--; } } ArrayList> colourSort(ArrayList C,ArrayList colOrd){ int m = colOrd.size(); ArrayList P = new ArrayList(m); ArrayList> colourClasses = new ArrayList>(); ArrayList> singletons = new ArrayList>(); for (int i=0;i colourClass = new ArrayList(); for (int i=0;i