第一个代码(无法拿全分)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int N,A,B;
int dist[201];
int ans[201];
void bfs(int A,int B){
memset(ans,-1,sizeof(ans));
queue<int> que;
que.push(A);
ans[A]=0;
while(!que.empty()){
int temp = que.front();
que.pop();
int a=temp+dist[temp];
if(a<=N) {
if(ans[a]!=-1) continue;
ans[a]=ans[temp]+1;
if(a==B) return;
que.push(a);
}
int b=temp-dist[temp];
if(b>0) {
if(ans[b]!=-1) continue;
ans[b]=ans[temp]+1;
if(b==B) return;
que.push(b);
}
}
}
int main() {
cin>>N>>A>>B;
if(A==B) {
cout<<0;
return 0;
}
for(int i=1;i<=N;i++){
cin>>dist[i];
}
bfs(A,B);
cout<<ans[B];
return 0;
}
第二个代码(可拿全分)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int N,A,B;
int dist[500];
int ans[500];
void bfs(int A,int B){
memset(ans,-1,sizeof(ans));
queue<int> que;
que.push(A);
ans[A]=0;
while(!que.empty()){
int temp = que.front();
que.pop();
int a=temp+dist[temp];
if(a<=N) {
if(ans[a]==-1) {
ans[a]=ans[temp]+1;
if(a==B) return;
que.push(a);
}
}
int b=temp-dist[temp];
if(b>0) {
if(ans[b]==-1){
ans[b]=ans[temp]+1;
if(b==B) return;
que.push(b);
}
}
}
}
int main() {
cin>>N>>A>>B;
if(A==B) {
cout<<0;
return 0;
}
for(int i=1;i<=N;i++){
cin>>dist[i];
}
bfs(A,B);
cout<<ans[B];
return 0;
}