你是一个教育专家,现在我们课题组弄了一个名为GPS-REN的AI教学法 其中G表示Goal-Oriented,目标导向,以具体问题驱动学习过程。 P表示Problem Definition问题定义用专业语言精确完备地描述问题从而向A获取更优结果。 S表示Systematic Breakdown系统拆解系统性拆解问题复杂问题分解为简单问题逐步向A获取高质量结果。 R表示Result Integration结果整合运用AI工具获取结果,并整合。 E表示Evaluation结果评估设计评估方案评估结果质量。 N表示New Knowledge总结新知识总结新知识实现学习闭环。 现在我给你一个完整的示例: G目标导向:求二维迷宫从起点到终点的最短路径 P问题描述:编写一个Python程序,用于解决二维迷宫中寻找最短路径的问题。该迷宫用*的矩阵来表示,矩阵中的每一个元素代表迷宫中的一个格子,其中值为1的格子表示障碍物,不能通行;值为0的格子是可以自由通行的空格;值为2的格子代表起点;值为3的格子代表终点。程序的目标是找出从起点到终点的最短路径。输入要求:程序首先会接受一个正整数,它代表了迷宫矩阵的维度大小,接着,程序会依次接收n行数据,每行数据n个用空格隔开的整数,这些整数共同构成了迷宫矩阵。输出要求:如果存在从起点到终点的最短路径,程序需要将该路径上的所有格子标记为*,并输出这个标记后的迷官矩阵;如果不存在这样的路径,则输出false。 S系统拆解:将起点放入队列从队列中取出一个点查找相邻的点将以访问的点标为4. R结果整合:from collections import deque def find_path(maze, start, end): directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # 上下左右 queue = deque() queue.append((start[0], start[1], 0)) maze[start[0]][start[1]] = 1 # 标记访问 while queue: x, y, steps = queue.popleft() if x == end[0] and y == end[1]: return steps for dx, dy in directions: nx, ny = x + dx, y + dy if 0 <= nx < len(maze) and 0 <= ny < len(maze[0]) and maze[nx][ny] == 0: queue.append((nx, ny, steps + 1)) maze[nx][ny] = 1 return -1 if __name__ == "__main__": maze = [ [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0] ] start = (0, 0) end = (4, 4) steps = find_path(maze, start, end) print(f"最短路径: {steps}" if steps != -1 else "无路径") E结果评估:1.正确性验证,测试用例示例:// 测试1:普通迷宫maze1 = [ [0, 0, 0], [0, 1, 0], [0, 0, 0] ] assert find_path(maze1, (0, 0), (2, 2)) == 4 // 测试2:无解迷宫:maze2 = [ [0, 1], [1, 0] ] assert find_path(maze2, (0, 0), (1, 1)) == -1 // 测试3:起点即终点 assert find_path(maze1, (0, 0), (0, 0)) == 0 print("All tests passed!") 2. 健壮性问题: 当迷宫不是矩形时(如[[0], [0,1]]),原代码len(maze[0])会始终以第一行为基准,可能导致后续行访问时越界。 N总结新知识:起点和终点定位(1)变量初始化:startX、startY、endX和endY分别用于存储起点和终点的坐标,初始值设为-1表示尚未找到。(2)遍历迷宫:使用嵌套的fo循环遍历整个迷官,当遇到值为2的格子时,记录其坐标作为起点;当遇到值为3的格子时,记录其坐标作为终点。(3)检查起点和终点是否存在:如果starXi或endX仍为-1,说明迷宫中缺少起点或终点,程序输出false并终止。 BFS搜索相关数据结构和初始化(1)visited数组:二维布尔数组visited,用于标记迷宫中每个格子是否已经被访问过,初始值都为false。(2)prev数组:三位整数数组prev用于记录每个格子的前驱节点, prev[x]yIO]和orev[x]yI1]分别表示格子(x,y)的前驱节点的x和y坐标。(3)Queue队列:Queue是java中的一个接口,LinkedLists实现了该接口,用于实现BFS算法的队列。将起点加入队列,并将其标记为已访问。(4)found标志:布尔变量found用于标记是否找到了终点,初始值为false 请根据用户的请求,生成一个符合 GPSREN 教学模型的结构化数据,必须以 JSON 格式输出 格式如下: { "knowledge": "...", "G": "...", "P": "...", "S": "...", "R": "...", "E": "...", "N": "..." } 请不要添加额外说明,只输出完整 JSON。