1. A1刷题对我的帮助与影响
AI刷题功能给了我非常大的帮助,极大提高了我的效率与学习速度。在刷题的过程中时常会卡住或者碰到知识盲区,但有了AI的帮助这些都能得以解决。我会向AI寻求做题的思路、相关的知识点,而AI在向我解释的过程中我可以不断对自己不够理解的地方进行追问,这就是一个自己不断学习进步的过程。AI极大减少了自己搜索资料的各种繁琐的步骤,将最精华的内容整理给我,从而让我有更多时间专注于练习与进步;同时AI可以帮助我查找代码中的错误,帮助自己优化代码,这更是极大节省了自己的时间,也提高了代码的质量。
在使用 AI 刷题功能之前,我的编程学习进展相对缓慢,常常因为卡在一个难题上而停滞不前。有时候即便解决了问题,也只是机械地模仿了答案的步骤,没有真正弄懂背后的思维模式。通过 AI 刷题,我逐渐体会到编程思维的核心逻辑,从逐行代码的解析到算法设计的深入理解,每次遇到新题时,我的思路会更加清晰,思考问题的速度也越来越快。尤其是在一些需要使用递归、动态规划等复杂算法的题目上,AI 的逐步引导和解释让我不再害怕去挑战高难度题,反而慢慢培养了我解决问题的信心。
使用 AI 刷题功能一段时间后,我发现它不仅让我更高效地掌握了编程思维,更对学习的体验产生了深刻的影响。每当遇到编程难题,AI 就像一个随时待命的助教,不仅能帮助我理清思路,还会给出详细的解题步骤和逻辑,让我在解决问题的同时能够理解其背后的思维方式。这种随时随地的学习支持,让我感受到 AI 技术带来的便利,更重要的是,它有效缩短了我在理解和掌握知识点上的时间。
2.AI刷题相关经历
记得在做一道涉及广度搜索算法的题目时,由于先前没有接触过这个算法,在这道题上卡了很久,问题久久无法得以进展。而当我开始寻求AI的帮助时,一切都变得不一样了。AI给我提供了一个参考做法并给了详细的解释,我于是接触了广度搜索算法,并在不断的追问中学会了这个算法,最终运用所学独立完成了题目。以下是当时AI给予的部分帮助。
from collections import deque
# 读取输入的行数n和列数m
n, m = map(int, input().split())
# 用于存储地图信息的列表
road = []
# 循环读取每一行的地图信息并添加到road列表中
for _ in range(n):
temp = input().split()
road.append(temp)
# 读取起点坐标(x1, y1)和终点坐标(x2, y2)
x1, y1, x2, y2 = map(int, input().split())
# 将起点和终点的坐标都减1,使其从0开始计数(符合列表索引规则)
x1 -= 1
y1 -= 1
x2 -= 1
y2 -= 1
def find_shortest_path():
"""
函数功能:
该函数用于在给定的地图中找到从起点到终点的最短路径长度。
算法思路:
使用广度优先搜索(BFS)算法。通过维护一个队列,从起点开始逐层遍历地图,
直到找到终点或者遍历完所有可达的节点。每次遍历到一个新节点时,记录其到起点的距离,
如果到达终点则返回该距离作为最短路径长度。
参数:
无(使用了全局变量n、m、road、x1、y1、x2、y2)
返回值:
如果找到从起点到终点的路径,则返回最短路径的长度;否则返回 -1。
"""
# 创建一个二维列表visited,用于记录每个节点是否已经被访问过,初始值都为False
visited = [[False] * m for _ in range(n)]
# 创建一个双端队列queue,并将起点坐标(x1, y1)以及到起点的距离0添加到队列中
queue = deque([(x1, y1, 0)])
# 只要队列不为空,就继续进行遍历
while queue:
# 从队列头部取出一个节点的坐标(x, y)以及到起点的距离length
x, y, length = queue.popleft()
# 如果当前节点就是终点,返回当前的距离length作为最短路径长度
if x == x2 and y == y2:
return length
# 检查当前节点的上方节点(x - 1, y)是否满足条件:
# 1. 在地图范围内(x > 0)
# 2. 该节点对应的地图位置为可通行(road[x - 1][y] == '1')
# 3. 该节点尚未被访问过(not visited[x - 1][y])
if x > 0 and road[x - 1][y] == '1' and not visited[x - 1][y]:
# 如果满足条件,将上方节点的坐标以及到起点的距离(length + 1)添加到队列中
queue.append((x - 1, y, length + 1))
# 标记上方节点已经被访问过
visited[x - 1][y] = True
# 检查当前节点的下方节点(x + 1, y)是否满足条件,条件同上方节点检查,只是方向相反
if x < n - 1 and road[x + 1][y] = '1' and not visited[x + 1][y]:
queue.append((x + 1, y, length + 1))
visited[x + 1][y] = True
# 检查当前节点的左方节点(x, y - 1)是否满足条件,条件类似
if y > 0 and road[x][y - 1] == '1' and not visited[x][y - 1]:
queue.append((x, y - 1, length + 1))
visited[x][y - 1] = True
# 检查当前节点的右方节点(x, y + 1)是否满足条件,条件类似
if y < m - 1 and road[x][y + 1] == '1' and not visited[x][y + 1]:
queue.append((x, y + 1, length + 1))
visited[x][y + 1] = True
# 如果遍历完所有可达节点后仍未找到终点,返回 -1表示不存在从起点到终点的路径
return -1
print(find_shortest_path())