Professional Documents
Culture Documents
class PuzzleState:
def __init__(self, board,
parent=None):
self.board = board
self.blank_position =
self.find_blank_position()
self.hash =
self.calculate_hash()
self.parent = parent
def find_blank_position(self):
for i in range(3):
for j in range(3):
if self.board[i][j] ==
0:
return i, j
def calculate_hash(self):
return tuple(map(tuple,
self.board))
def __hash__(self):
return hash(self.hash)
def __str__(self):
return '\n'.join(['
'.join(map(str, row)) for row in
self.board])
def count_inversions(board):
flattened_board = [val for row in
board for val in row if val != 0]
inversions = 0
for i in
range(len(flattened_board)):
for j in range(i + 1,
len(flattened_board)):
if flattened_board[i] >
flattened_board[j]:
inversions += 1
return inversions
def bidirectional_search(initial,
goal):
if not is_solvable(initial, goal):
return None
initial_state =
PuzzleState(initial)
goal_state = PuzzleState(goal)
return None
def generate_neighbors(state):
i, j = state.blank_position
neighbors = []
return neighbors
path.reverse()
current = middle
return path
# Example usage:
initial_state = [
[1, 2, 3],
[0, 4, 6],
[7, 5, 8]
]
goal_state = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 0]
]
path =
bidirectional_search(initial_state,
goal_state)
if path:
print("Solution found!")
for step, state in enumerate(path):
print(f"Step {step}:")
print(state)
else:
print("No solution found.")
Output :
C:\Users\Avantika\gui\venv\Scripts\python.exe
C:/Users/Avantika/gui/main.py
Solution found!
Step 0:
123
406
758
Step 1:
123
456
708
Step 2:
123
456
780