1 条题解
-
0
#include <iostream> #include <vector> #include <queue> int main() { int N, A, B; std::cin >> N >> A >> B; // 输入 N, A, B A--; // 转换为0基索引 B--; // 转换为0基索引 std::vector<int> K(N); for (int i = 0; i < N; ++i) { std::cin >> K[i]; // 输入每层楼的 K 值 } std::queue<std::pair<int, int>> q; // 队列保存 (当前楼层, 按键次数) std::vector<bool> visited(N, false); // 访问标记 q.push({A, 0}); // 从 A 楼开始 visited[A] = true; while (!q.empty()) { int currentFloor = q.front().first; int buttonPresses = q.front().second; q.pop(); // 到达目标楼层 B if (currentFloor == B) { std::cout << buttonPresses << std::endl; return 0; } // 计算可以到达的楼层 int upFloor = currentFloor + K[currentFloor]; // 上 int downFloor = currentFloor - K[currentFloor]; // 下 // 尝试向上移动 if (upFloor < N && !visited[upFloor]) { visited[upFloor] = true; q.push({upFloor, buttonPresses + 1}); } // 尝试向下移动 if (downFloor >= 0 && !visited[downFloor]) { visited[downFloor] = true; q.push({downFloor, buttonPresses + 1}); } } // 如果无法到达目标楼层 B std::cout << -1 << std::endl; return 0; }
- 1
信息
- ID
- 508
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 2
- 上传者