from collections import deque directions = {'rtl': (-1, 0), 'ltr': (1, 0), 'ttb': (0, -1), 'btt': (0, 1)} def min_steps_to_sort(matrix): n = len(matrix) target = [[i for i in range(1, n*n)] + [0]] # 将矩阵转换为易于处理的表示形式 initial_state = flatten_matrix(matrix) queue = deque([(initial_state, [])]) visited = set() while queue: state, steps = queue.popleft() if state == target: return steps for pos in find_zero(state): # 寻找当前状态下的空格子位置 x, y = pos for direction, (dx, dy) in directions.items(): new_pos = (x + dx, y + dy) if 0 <= new_pos[0] < n and 0 <= new_pos[1] < n: new_state = move_zeros(state, pos, new_pos) if new_state not in visited: visited.add(new_state) queue.append((new_state, steps + [(pos, direction, count_zeros_in_direction(state, pos, direction))])) return None # 如果无法到达目标状态,则返回None # 辅助函数:将矩阵展平为一维数组 def flatten_matrix(matrix): ... # 辅助函数:查找矩阵中0的位置 def find_zero(state): ... # 辅助函数:将空格子从一个位置移动到另一个位置 def move_zeros(state, from_pos, to_pos): ... # 辅助函数:统计在指定方向上有多少个连续的0需要移动 def count_zeros_in_direction(state, start_pos, direction): ...