#____________________________________________________________________________ # 8-Puzzle Problem using BFS, DFS, iterative deepening, best-first-search, A* import search from search import * class Eight_Puzzle(Problem): def __init__(self, puzzle = None, dict = None): self.goal = (0, 1, 2, 3, 4, 5, 6, 7, 8) self.puzzle = puzzle self.dict = dict or {} def successor(self): next_stage = None if 0 in (self.puzzle[0]): possible1 = (self.puzzle(1),self.puzzle(0),self.puzzle(2),self.puzzle(3),self.puzzle(4),self.puzzle(5),self.puzzle(6),self.puzzle(7),self.puzzle(8)) possible2 = (self.puzzle(3),self.puzzle(1),self.puzzle(2),self.puzzle(0),self.puzzle(4),self.puzzle(5),self.puzzle(6),self.puzzle(7),self.puzzle(8)) next_stage = (possible1, possible2) return next_stage if 0 in (self.puzzle[1]): possible1 = (self.puzzle(1),self.puzzle(0),self.puzzle(2),self.puzzle(3),self.puzzle(4),self.puzzle(5),self.puzzle(6),self.puzzle(7),self.puzzle(8)) possible2 = (self.puzzle(0),self.puzzle(2),self.puzzle(1),self.puzzle(3),self.puzzle(4),self.puzzle(5),self.puzzle(6),self.puzzle(7),self.puzzle(8)) possible3 = (self.puzzle(0),self.puzzle(4),self.puzzle(2),self.puzzle(3),self.puzzle(1),self.puzzle(5),self.puzzle(6),self.puzzle(7),self.puzzle(8)) next_stage = (possible1, possible2, possible3) return next_stage