-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbacktrack.py
37 lines (27 loc) · 1.18 KB
/
backtrack.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from heuristics import select_unassigned_variable, order_domain_values
from utils import is_consistent, assign, unassign
"""
Backtracking Algorithm
pseudo code found @ https://sandipanweb.files.wordpress.com/2017/03/im31.png
"""
def recursive_backtrack_algorithm(assignment, sudoku):
# if assignment is complete then return assignment
if len(assignment) == len(sudoku.cells):
return assignment
# var = select-unassigned-variables(csp)
cell = select_unassigned_variable(assignment, sudoku)
# for each value in order-domain-values(csp, var)
for value in order_domain_values(sudoku, cell):
# if value is consistent with assignment
if is_consistent(sudoku, assignment, cell, value):
# add {cell = value} to assignment
assign(sudoku, cell, value, assignment)
# result = backtrack(assignment, csp)
result = recursive_backtrack_algorithm(assignment, sudoku)
# if result is not a failure return result
if result:
return result
# remove {cell = value} from assignment
unassign(sudoku, cell, assignment)
# return failure
return False