import java.util.*; public class MC0 extends MC { MC0 (int n,int[][]A,int[] degree) {super(n,A,degree);} void expand(ArrayList C,ArrayList P){ if (timeLimit > 0 && System.currentTimeMillis() - cpuTime >= timeLimit) return; nodes++; int m = P.size(); for (int i=m-1;i>=0;i--){ if (C.size() + P.size() <= maxSize) return; int v = P.get(i); C.add(v); ArrayList newP = new ArrayList(i); for (int j=0;j<=i;j++){ int w = P.get(j); if (A[v][w] == 1) newP.add(w); } if (newP.isEmpty() && C.size() > maxSize) saveSolution(C); if (!newP.isEmpty()) expand(C,newP); C.remove((Integer)v); P.remove((Integer)v); } } // // We replace the "foreach" construct, resulting in a 25% // performance improvement, detectable when n >= 50 and p = 0.9 // NOTE: "foreach" shows no penalty (that I have observed) when // iterating over an array, but does when iterating over ArrayList // }