import java.util.*; import static choco.Choco.*; import choco.cp.model.CPModel; import choco.cp.solver.CPSolver; import choco.kernel.model.Model; import choco.kernel.solver.Solver; import choco.kernel.model.variables.integer.IntegerVariable; import choco.cp.solver.search.integer.varselector.StaticVarOrder; import choco.cp.solver.search.integer.valiterator.DecreasingDomain; import choco.kernel.solver.variables.integer.IntDomainVar; import choco.kernel.solver.ContradictionException; public class Extremal24 { int n; // number of vertices int e; // number of edges IntegerVariable [][] A; // A[i][j] = 1 <-> adjacent(i,j); IntegerVariable [] flatA; // A[][] flattened IntegerVariable [] instOrd; // instantiation order IntegerVariable [] degree; // the degree of a vertex CPModel model; CPSolver solver; Extremal24(int e,int d, int D){ this.n = 24; this.e = e; model = new CPModel(); solver = new CPSolver(); A = new IntegerVariable[n][n]; // A[i][j] == 1 <-> adjacent(i,j); flatA = new IntegerVariable[n*(n-1)/2]; instOrd = new IntegerVariable[n*(n-1)/2]; degree = makeIntVarArray("deg",n,d,D); for (int i=0;ii;j--,k++) instOrd[k] = A[i][j]; } void edge(int i,int j){model.addConstraint(eq(1,A[i][j]));} void noEdge(int i,int j){model.addConstraint(eq(0,A[i][j]));} void makeStar_5_3(){ for (int j=1;j<=5;j++) edge(0,j); for (int j=1;j<=3;j++){ edge(1,j+5); edge(2,j+8); edge(3,j+11); edge(4,j+14); edge(5,j+17); } } void edgeSum(){model.addConstraint(eq(sum(flatA),e));} void degreeConstraints(){ for (int i=0;i