backtracking search

wip
This commit is contained in:
2025-09-23 15:04:02 +02:00
parent 41edee1bc9
commit d0fe31383a

View File

@@ -130,11 +130,32 @@ class CSP:
A solution if any exists, otherwise None
"""
def backtrack(assignment: dict[str, Any]):
# YOUR CODE HERE (and remove the assertion below)
assert False, "Not implemented"
return self._backtrack({})
return backtrack({})
def _select_unassigned_variable(self, assignment) -> str:
for v in self.variables:
if v not in assignment.keys():
return v
return "this shouldn't happen"
# TODO: may be wrong
def _order_domain_values(self, var, assignment) -> list[Any]:
"""least constrained value"""
def compare(value) -> int:
s = 0
for neighbor in [
b for (a, b) in self.binary_constraints.keys() if a == var
]:
if neighbor in assignment.keys():
continue
for neighbor_value in self.domains[neighbor]:
s += (value, neighbor_value) not in self.binary_constraints[
(var, neighbor)
]
return s
return sorted(list(self.domains[var]), key=compare)
def alldiff(variables: list[str]) -> list[tuple[str, str]]: