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;
}