1 条题解

  • 0
    @ 2024-9-24 21:24:53
    #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
    上传者