五颜六色

P1135 奇怪的电梯

```cpp #include<bits/stdc++.h> using namespace std; int n,k[201],a,b,d[20001][2]; int df[3]={0,1,-1}; bool bz[201]; void bfs() { int head=0,tail=1; d[1][0]=0; d[1][1]=a; while(head<tail) { head++; for(int i=1;i<=2;i++) { int l=d[head][1]+(df[i]*k[d[head][1]]); if(l>0 && l<=n && bz[l]==0) { bz[l]=1; tail++; d[tail][0]=d[head][0]+1; d[tail][1]=l; if(l==b) { cout<<d[tail][0]; exit(0); } } } } cout<<"-1"; } int main() { cin>>n>>a>>b; for(int i=1;i<=n;i++) { cin>>k[i]; } if(a==b) { cout<<'0'; exit(0); } bfs(); } ```````
by HEROBRINEH @ 2024-03-03 11:10:55


```cpp #include<bits/stdc++.h> using namespace std; int N,A,B,k[210]; int ans=1e9,minn[210]/*到达此楼最少步数*/; void dfs(int a,int b,int bushu){ if(a<1 || a>N)/*超出范围*/ return; if(bushu>=minn[a])/*到过了*/ return; if(bushu>=ans)/*次数超过*/ return; if(a==b){ ans=bushu; return; } minn[a]=bushu; dfs(a+k[a],b,bushu+1);//↑ dfs(a-k[a],b,bushu+1);//↓ } int main(){ cin>>N>>A>>B; for(int i=1;i<=N;i++){ cin>>k[i]; minn[i]=1e9; } dfs(A,B,0); cout<<(ans==1e9?-1:ans); return 0; } ```
by AC___ @ 2024-03-21 21:52:37


|