6パズルの解法:BFS行列を使用したアプローチ


from queue import Queue
def solve_puzzle(initial_state):
    # 目標の配置
    goal_state = [[1, 2, 3], [4, 5, 6], [7, 8, None]]
    # 移動の方向(上、下、左、右)
    directions = [(0, -1), (0, 1), (-1, 0), (1, 0)]
    # 初期状態をキューに追加
    queue = Queue()
    queue.put((initial_state, []))
    while not queue.empty():
        state, path = queue.get()
        if state == goal_state:
            return path
        # 空白スペースの位置を探す
        empty_space = find_empty_space(state)
        for direction in directions:
            new_state = move(state, empty_space, direction)
            new_path = path + [direction]
            queue.put((new_state, new_path))
    return None
def find_empty_space(state):
    for i in range(3):
        for j in range(3):
            if state[i][j] is None:
                return (i, j)
def move(state, empty_space, direction):
    empty_row, empty_col = empty_space
    move_row, move_col = direction
    new_state = [row[:] for row in state]
    new_state[empty_row][empty_col] = new_state[empty_row + move_row][empty_col + move_col]
    new_state[empty_row + move_row][empty_col + move_col] = None
    return new_state
# 6パズルの初期状態
initial_state = [[2, None, 3], [1, 4, 6], [7, 5, 8]]
# パズルを解く
solution = solve_puzzle(initial_state)
print("解法の手順: ", solution)

このコードは、6パズルの初期状態を指定し、BFSアルゴリズムを使用して目標の配置に到達するための手順を見つけます。キューを使用して状態を管理し、空白スペースを移動させることでパズルを進めていきます。最終的な解法の手順は、solve_puzzle関数から返されます。

このコード例を使って、6パズルを解くためのBFSアルゴリズムの実装方法を学ぶことができます。他のパズルや問題にBFSアルゴリズムを適用する際にも、このコードを参考にすることができます。