80分BFS求助, 第九、十个测试点没过
查看原帖
80分BFS求助, 第九、十个测试点没过
815490
cagur楼主2022/12/1 19:48

大佬们救救!!!SOS

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,a,b;//楼梯层数,开始 结束
int k[205];//每层楼梯可走的地方
bool vis[205];
int cnt;
// int d[205];
void bfs();
int main(){
    scanf("%d %d %d",&n,&a,&b);
    for(int i=1;i<=n;i++) scanf("%d",&k[i]);
    memset(vis,false,sizeof(vis));
    // d[stx] = 0;
    bfs();
    return 0;
}
void bfs(){
    queue<int>que;
    int nx = a;
    int nnx;
    que.push(nx);
    while(!que.empty()){
        nx = que.front();
        que.pop();
        if(nx == b) break;
        if(nx+k[nx] <= n && !vis[nx+k[nx]]){
            nnx = nx+k[nx];
            vis[nnx] = true;
            que.push(nnx);
            cnt++;
        }else if(nx-k[nx] >=1&& !vis[nx-k[nx]]){
            nnx = nx-k[nx];
            vis[nnx] = true;
            que.push(nnx);
            cnt++;
        }
    }
    if(nx==b) cout << cnt;
    else cout << -1 ;
    return;
}
2022/12/1 19:48
加载中...