ki = 0时有什么意义,卡在那一层不能上不能下吗
查看原帖
ki = 0时有什么意义,卡在那一层不能上不能下吗
248722
kenturion楼主2020/5/11 20:47
#include <bits/stdc++.h>
using namespace std;

queue<int> q;
int dir[210];//当前层可走的步数
int bu[210];//记录每层的步数
bool f[210];//表示每层是否访问

int main()
{
    int n,a,b;
    cin>>n>>a>>b;//层数,开始位置,终止位置
    if(a == b){

    }
    for(int i = 1;i <= n;i++){
        cin>>dir[i];
    }
    memset(bu, -1, sizeof(a));
    memset(f, false, sizeof(f));
    bu[a] = 0;
    f[a] = true;
    q.push(a);
    while(!q.empty()){
        int x = q.front();
        q.pop();
        if (x == b) break; //没有加跳出,把所有的点全部都算出来了,白白浪费时间
        if(dir[x] == 0) continue;//当前楼层只能走0步
        if(x+dir[x]<=n && !f[x+dir[x]]){//忘记判断是否访问过,瞎几把搜
            f[x+dir[x]] = true;
            bu[x+dir[x]] = bu[x]+1;
            q.push(x+dir[x]);
            //cout<<"+"<<endl;
        }
        if(x-dir[x]>=1 && !f[x-dir[x]]){
            //cout<<x-dir[x]<<endl;
            f[x-dir[x]] = true;
            bu[x-dir[x]] = bu[x]+1;
            q.push(x-dir[x]);
            //cout<<"-"<<endl;
        }
        //cout<<q.front()<<endl;

    }
    if(a == b){
        cout<<0<<endl;
        return 0;
    }
    /*if(bu[b] != 0)//bu初始化是-1,结果为0代表着只走了一步就达到终点
        cout<<bu[b]<<endl;
    else
        cout<<-1<<endl;*/
    cout<<bu[b]<<endl;

    return 0;
}

2020/5/11 20:47
加载中...