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; public class Exists { int n; // number of vertices int e; // number of edges IntegerVariable [][] A; // A[i][j] = 1 <-> adjacent(i,j); IntDomainVar [][] solverA; // the solver variables IntegerVariable [] flatA; // A[][] flattened IntegerVariable [] instOrd; // instantiation order IntegerVariable [] degree; // the degree of a vertex CPModel model; CPSolver solver; Exists(int n,int e,int d,int D,int minGirth){ this.n = n; this.e = e; 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,k=0;ii;j--,k++) instOrd[k] = A[i][j]; for (int i=0;i