只有76分,请教一下各位大佬
  • 板块题目总版
  • 楼主dhm2048
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/21 17:49
  • 上次更新2024/9/21 18:23:31
查看原帖
只有76分,请教一下各位大佬
1461605
dhm2048楼主2024/9/21 17:49

请教一下各位大佬,不知道是不是我自己忽略了什么条件

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>

using namespace std;

int n,a,b,ans = 0;
constexpr int N = 10001;
int arr[N],flag[N],vis[N];
queue<int> Q;

int main()
{
    cin >> n >> a >> b;
    memset(flag,0,sizeof(flag));
    memset(vis, 0, sizeof(vis)); // 初始化 vis 数组

    for (int i = 1; i <= n; i++)
    {
        cin >> arr[i];
        ans = 1;
    }
    Q.push(a);
    vis[a] = 1; // 将起点标记为已访问
    while(!Q.empty())
    {
        int item = Q.front();
        int up = item + arr[item];
        int down = item - arr[item];
        Q.pop();
        if (item == b)
        {
            cout << flag[item];
            ans = 1;
            break;
        }
        if (up >= 1 && up <= n && !vis[up]) // 判断 up 是否合法且未被访问
        {
            vis[up] = 1;
            Q.push(up);
            flag[up] = flag[item] + 1;
        }
        if (down >= 1 && down <= n && !vis[down]) // 判断 down 是否合法且未被访问
        {
            vis[down] = 1;
            Q.push(down);
            flag[down] = flag[item] + 1;
        }
    }
    if (!ans)
    {
        cout << -1;
    }
    return 0;
}
2024/9/21 17:49
加载中...