Example #1
0
 def arc_consistency(self, sudoku, numRounds):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     size_of_domain = 0
     total_domains = list()
     for round in range(numRounds):
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         total_domains.append(size_of_domain)
         size_of_domain = 0
     return total_domains
Example #2
0
 def arc_consistency(self, sudoku, numRounds):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     size_of_domain = 0
     total_domains = list()
     for round in range(numRounds):
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         total_domains.append(size_of_domain)
         size_of_domain = 0
     return total_domains
Example #3
0
 def isSolvableByAC(self, sudoku):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     prev_domain = None
     size_of_domain = 0
     while True:
         self.arcConsistencyCounter += 1
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         if (prev_domain == domains):
             return False
         if (sudoku.isComplete()):
             return True
         prev_domain = domains
Example #4
0
 def isSolvableByAC(self, sudoku):
     domains = dict()
     for i in range(0, 9):
         domains[i] = dict()
     prev_domain = None
     size_of_domain = 0
     while True:
         self.arcConsistencyCounter += 1
         for i in range(9):
             for j in range(9):
                 domains[i][j] = sudoku.getLegalMoves(i, j)
                 size_of_domain += len(domains[i][j])
                 if len(domains[i][j]) == 1:
                     sudoku.setSquare(i, j, domains[i][j][0])
         if prev_domain == domains:
             return False
         if sudoku.isComplete():
             return True
         prev_domain = domains
Example #5
0
 def doBacktracking(self, sudoku, moveStack):
     empties = sudoku.getEmptySquares()
     if (len(empties) == 0):
         self.backTrackingResult = sudoku
         return True
     else:
         (i, j) = empties[0]
         domain = sudoku.getLegalMoves(i, j)
         moveStack.append(((i, j), sudoku.copy()))
         for value in domain:
             sudoku.setSquare(i, j, value)
             self.backTrackingCounter += 1
             if self.isSolvableByAC(sudoku):
                 self.backTrackingResult = sudoku
                 return True
             if not sudoku.hasEmptyDomain():
                 if self.doBacktracking(sudoku, moveStack):
                     return True
             sudoku = moveStack[-1][1].copy()
         moveStack.pop()
         return False
Example #6
0
 def doBacktracking(self, sudoku, moveStack):
     empties = sudoku.getEmptySquares()
     if len(empties) == 0:
         self.backTrackingResult = sudoku
         return True
     else:
         (i, j) = empties[0]
         domain = sudoku.getLegalMoves(i, j)
         moveStack.append(((i, j), sudoku.copy()))
         for value in domain:
             sudoku.setSquare(i, j, value)
             self.backTrackingCounter += 1
             if self.isSolvableByAC(sudoku):
                 self.backTrackingResult = sudoku
                 return True
             if not sudoku.hasEmptyDomain():
                 if self.doBacktracking(sudoku, moveStack):
                     return True
             sudoku = moveStack[-1][1].copy()
         moveStack.pop()
         return False