社区讨论

只有50分,求大佬帮助

P1135奇怪的电梯参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo89qiaz
此快照首次捕获于
2023/10/27 15:05
2 年前
此快照最后确认于
2023/10/27 15:05
2 年前
查看原帖
使用的bfs,队列进行维护,但不知道哪里出了问题,求各位大佬帮忙解决下,代码如下:
CPP
#include<cstdio>
#include<queue>
#define maxn 210
using namespace std;
int n, a, b, ans, lift[maxn], vis[maxn];
queue <int> q;
int main()
{
    scanf("%d%d%d", &n, &a, &b);
    for(int i = 1; i <= n; i++)
        scanf("%d", &lift[i]);
    q.push(a);
    if (a == b)
    {
        printf("0");
        return 0;
    }
    while(!q.empty())
    {
        int s = q.front();
        printf("%d\n", s);
        q.pop();
        if (s + lift[s] == b || s - lift[s] == b)
        {
            printf("%d", ans + 1);
            return 0;
        }
        if (s + lift[s] <= n && vis[s + lift[s]] == 0){
            vis[s + lift[s]] = 1;
            q.push(s + lift[s]);
        }
        if (s - lift[s] >= 1 && vis[s - lift[s]] == 0){
            vis[s - lift[s]] = 1;
            q.push(s - lift[s]);
        }
        ans++;
    }
    printf("-1");
    return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...