求测试点8

P1135 奇怪的电梯

额... 这题不是裸的BFS吗 @[vandarkholme](/space/show?uid=64353) 我为了你打的!一遍AC ! ```cpp #pragma GCC optimize(3) #include <iostream> #include <algorithm> #include <cstring> #include <math.h> #include <stdio.h> #include <queue> #include <vector> #include <map> #define fi first #define se second #define P pair<long long,long long> #define DEBUG printf("fuck\n") #define N 250 #define INF 0x3f3f3f3f #define FOR(i,a,b) for(int i=a;i<=b;i++) #define FOR_(i,a,b) for(int i=a;i>=b;i--) using namespace std; int n,a,b,st[N],vis[N]; queue<P> G; inline int BFS() { vis[a]=1; G.push(P(a,0)); while(!G.empty()) { P now=G.front(); G.pop(); if(now.first==b) return now.second; int loc=now.first; if(!vis[loc+st[loc]]&&loc+st[loc]<=n&&loc+st[loc]>=1) { G.push(P(loc+st[loc],now.second+1)); vis[loc+st[loc]]=1; } if(!vis[loc-st[loc]]&&loc-st[loc]<=n&&loc-st[loc]>=1) { G.push(P(loc-st[loc],now.second+1)); vis[loc-st[loc]]=1; } } return -1; } int main(int argc, char const *argv[]) { scanf("%d%d%d",&n,&a,&b); for(int i=1;i<=n;i++) scanf("%d",&st[i]); printf("%d\n",BFS()); return 0; } ```
by Bartholomew @ 2017-11-26 22:18:15


|