def var_selector_no_ac3(sudoku): for i in range(len(sudoku)): for j in range(len(sudoku[i])): if sudoku[i][j] == 0: domainSetMat = calculateDomainSetMat(sudoku) domain = lcv_values(sudoku, i, j, domainSetMat) return i, j, domain
def mrv_domains(sudoku, allMinDomainVars, returnDomainSetMat, domainMat=None): if domainMat is None: domainSetMat = calculateDomainSetMat(sudoku) else: domainSetMat = domainMat minDomainsVariablesArray = minDomainArray(domainSetMat) if len(minDomainsVariablesArray) == 0: if returnDomainSetMat is True: return None, None else: return None if allMinDomainVars is True: # return all the variables that have minimum domain length min_domains = { var: domainSetMat[var[0]][var[1]] for var in minDomainsVariablesArray } else: # return just one variable that have minimum domain length var = minDomainsVariablesArray[0] min_domains = {var: domainSetMat[var[0]][var[1]]} if returnDomainSetMat is True: return min_domains, domainSetMat else: return min_domains
def search(sudoku, useAc3=False): if useAc3 is False: return backtracking_search(sudoku, var_selector_no_ac3) else: variables = set() for i in range(len(sudoku)): for j in range(len(sudoku[i])): if sudoku[i][j] == 0: variables.add((i, j)) domainSetMat = calculateDomainSetMat(sudoku) check = ac3(sudoku, variables, domainSetMat) if check is False: return None return backtracking_search_memory(sudoku, var_selector_ac3, domainSetMat, variables)
def var_selector_no_ac3(sudoku): var = maxDegreeVar(sudoku) domainSetMat = calculateDomainSetMat(sudoku) orderedDomain = lcv_values(sudoku, var[0], var[1], domainSetMat) return var[0], var[1], orderedDomain
def search(sudoku): domainSetMat = calculateDomainSetMat(sudoku)