def backtrackingRecursiveMRVcp(board,board_size,small_row,small_col): global checks #base case if func.boardFull(board,board_size) : return True,checks minPos,board_dict_list=func.findNextPosMRV(board,board_size,small_row,small_col) # find the next MRV pos and list of values unassigned_row=int(minPos/board_size) unassigned_col=minPos%board_size #update list for LCV sorted board_dict_list=func.updateList(board,board_size,unassigned_row,unassigned_col,small_row,small_col,board_dict_list) if (board_dict_list==[]): return False,checks #for every fwd consistent values for digit in board_dict_list: checks=checks+1 board[unassigned_row][unassigned_col]=digit board_dict=func.updateDict(board,board_size,small_row,small_col,board_dict={}) if(backtrackingRecursiveMRVcp(board,board_size,small_row,small_col)[0]==True): # recursive calls return True,checks board[unassigned_row][unassigned_col]=0 # backtracking and reverting last move made #check for backward consistency if func.backwardConsistent(board_dict)==False: return False,checks return False,checks
def backtrackingRecursiveMRVfwd(board,board_size,small_row,small_col): global checks #base case if func.boardFull(board,board_size) : return True,checks minPos,board_dict_list=func.findNextPosMRV(board,board_size,small_row,small_col) # find next pos and set of valid moves unassigned_row=int(minPos/board_size) unassigned_col=minPos%board_size #update the list with checks done to see if forward consistency is valid board_dict_list=func.updateList(board,board_size,unassigned_row,unassigned_col,small_row,small_col,board_dict_list) if (board_dict_list==[]): return False,checks for digit in board_dict_list: checks=checks+1 board[unassigned_row][unassigned_col]=digit # assignment of value if(backtrackingRecursiveMRVfwd(board,board_size,small_row,small_col)[0]==True): # recursive call return True,checks board[unassigned_row][unassigned_col]=0 # backtracking and reverting return False,checks