/** : the degree heuristic. */
private List <Variable> applyDegreeHeuristic(List <Variable> vars,
Assignment assignment, CSP csp)
{
List <Variable> result = new List <Variable>();
int maxDegree = int.MIN_VALUE;
foreach (Variable var in vars)
{
int degree = 0;
foreach (Constraint constraint in csp.getConstraints(var))
{
Variable neighbor = csp.getNeighbor(var, constraint);
if (!assignment.hasAssignmentFor(neighbor) &&
csp.getDomain(neighbor).Count > 1)
{
++degree;
}
}
if (degree >= maxDegree)
{
if (degree > maxDegree)
{
result.clear();
maxDegree = degree;
}
result.Add(var);
}
}
return(result);
}