Live2D

[题解]洛谷P1135 奇怪的电梯

思路:

 DFS会TEL  

  广度优先搜索

  1.每次取当前楼层上下两种情况,判断是否合法

  2.因为是bfs所以如果遍历到一个节点已经走到过则是无意义的

  3.所以path只要直接更改即可

代码:

#include<cstdio>
#include<queue>
using namespace std;

int ans=0,k[201],a,b,n,vis[201]={0},found=0,path[10010];

void bfs(){
    int d[201]={0}; 
    queue<int>q;
    q.push(a);
    //path[a]=-1;
    while(!q.empty()){
        int nn=q.front();q.pop();
        int up=nn+k[nn],down=nn-k[nn];
        if(nn==b){printf("%d",d[b]);found=1;break;}
        if(vis[up]==0&&up>=1&&up<=n){
            vis[up]=1;q.push(up);d[up]=d[nn]+1;
        }
        if(vis[down]==0&&down>=1&&down<=n){
            vis[down]=1;q.push(down);d[down]=d[nn]+1;
        }
    }
}

int main(){
    scanf("%d%d%d",&n,&a,&b);
    for(int i=1;i<=n;i++)
        scanf("%d",&k[i]);
    bfs(); 
    if(!found)printf("-1");
} 

 

posted @ 2018-10-28 13:16  SHGEEK  阅读(187)  评论(0编辑  收藏  举报