def odv_forward_mrv_mcv_lcv(row, col, domains, board, assignment): max_count = 0 max_index = 0 domain = domains[str([row, col])] dictionary = {} for i in range(len(domain)): val = domain[i] count = 0 # row checking for r in range(board.BoardSize): if (not sudoku.is_assigned(r, col, board, assignment)) and domains[str([r, col])].count(val): count += 1 # column checking for c in range(board.BoardSize): if (not sudoku.is_assigned(row, c, board, assignment)) and domains[str([row, c])].count(val): count += 1 # subsquare checking subsquare = int(math.sqrt(board.BoardSize)) squareRow = row // subsquare squareCol = col // subsquare for r in range(subsquare): for c in range(subsquare): if ( not sudoku.is_assigned(squareRow * subsquare + r, squareCol * subsquare + c, board, assignment) ) and domains[str([squareRow * subsquare + r, squareCol * subsquare + c])].count(val): count += 1 dictionary[val] = count sorted_dictionary = sorted(dictionary.iteritems(), key=operator.itemgetter(1)) dom = [] for dom_val in sorted_dictionary: dom.append(dom_val[0]) return reversed(dom)
def select_unassigned_variable_mrv(board,assignment,domains): min_row = 0 min_col = 0 min_len = len(board.CurrentGameboard) + 1 constraining_val = 0 mrv = [] for r in range(board.BoardSize): for c in range(board.BoardSize): if not sudoku.is_assigned(r,c,board,assignment): key = str([r, c]) if len(domains[key]) < min_len: # val = constraining_value(r, c, board, assignment) # if(val >= constraining_val): min_len = len(domains[key]) min_row = r min_col = c # constraining_val = val elif len(domains[key]) == min_len: val = constraining_value(r, c, board, assignment) if(val > constraining_val): min_len = len(domains[key]) min_row = r min_col = c constraining_val = val return min_row, min_col
def constraining_value(row, col, board, assignment): count = 0; for i in range(board.BoardSize): if not sudoku.is_assigned(row, i, board, assignment): count += 1 if not sudoku.is_assigned(i, col, board, assignment): count += 1 # print count subsquare = int(math.sqrt(board.BoardSize)) squareRow = row // subsquare squareCol = col // subsquare # return count for r in range(subsquare): for c in range(subsquare): if not sudoku.is_assigned(r, c, board, assignment): count += 1 # print count return count
def select_unassigned_variable(board,assignment): for r in range(board.BoardSize): for c in range(board.BoardSize): if not sudoku.is_assigned(r,c,board,assignment): return r, c