返回题解分享
讨论 / 题解分享/ 帖子详情

奇怪的电梯 - 题解

int main() {
    int n, a, b;
    cin >> n >> a >> b;
    vector<int> nums(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> nums[i];
    }

    vector<bool> visited(n + 1, false);
    queue<State> q;
    q.push(State(a, 0));
    visited[a] = true;

    while (!q.empty()) {
        State current = q.front();
        q.pop();

        if (current.floor == b) {
            cout << current.presses << endl;
            return 0;
        }

        int up = current.floor + nums[current.floor];
        int down = current.floor - nums[current.floor];

        if (up <= n && !visited[up]) {
            q.push(State(up, current.presses + 1));
            visited[up] = true;
        }
        if (down >= 1 && !visited[down]) {
            q.push(State(down, current.presses + 1));
            visited[down] = true;
        }
    }
    cout << -1 << endl;
    return 0;
}
0 回复 0 转发 0 喜欢 3 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!