C++解决洛谷P1135:奇怪的电梯问题

5星 · 超过95%的资源 需积分: 22 1 下载量 117 浏览量 更新于2024-08-04 1 收藏 546B TXT 举报
"洛谷P1135:奇怪的电梯AC代码,是一道关于图论和广度优先搜索(BFS)的算法题目。AC代码表示该解决方案已通过所有测试用例,具有较高的正确性。" 在编程竞赛平台洛谷上,题目P1135涉及了一个有趣的电梯问题。这个问题可以通过理解和应用图论中的广度优先搜索(BFS)算法来解决。AC代码是编程竞赛中常用的术语,表示提交的代码已经通过了所有的测试用例,表明这个解决方案是正确的。 在这个问题中,我们有两个关键变量`n`和`a, b`,分别代表电梯的总层数和初始位置以及目标位置。`k[210]`数组存储每一层电梯移动的步数,可能向上或向下移动。`v[210]`数组用于记录从初始位置到达各层楼的最短步数,初始时所有值为0,`v[a]`设置为1表示从初始位置到`a`层的距离为1步。 `dx[2]`数组包含电梯可能的两个移动方向,即正向(+1)和反向(-1)。`cont`变量在这里未被使用,可能是遗留的代码或者在完整版本中有其他作用。 `search`函数是问题的核心,它使用了BFS策略来寻找从`a`到`b`的最短路径。首先将起始位置`a`入队,并初始化路径长度为1。然后,当队列不为空时,持续进行以下操作:出队当前层的节点,检查是否到达目标位置`b`,如果到达则返回路径长度。否则,遍历电梯可能的两个移动方向,更新相邻楼层的路径长度,并将未访问过的楼层加入队列。 在`main`函数中,首先清零`v`数组,然后读入`n`、`a`和`b`的值以及每层电梯的移动步数`k[i]`。接着,设置`v[a]`为1,表示从`a`层到`a`层的路径长度为1。最后,调用`search`函数计算从`a`到`b`的最短步数,并输出结果。 整个代码的逻辑清晰,使用了BFS有效地解决了问题。在实际编程竞赛中,这样的AC代码可以帮助参赛者节省时间并提高排名。对于学习算法和图论的初学者来说,这是一个很好的实践案例,可以加深对BFS的理解和应用。