https://www.luogu.org/problem/P1135
参考代码:
DFS:
#include<bits/stdc++.h>
using namespace std;
int n,a,b,arr[201],ans=100000;
bool cf[201];
void dfs(int now,int sum)
{
if(now==b)
ans=min(ans,sum);
else if(sum<=ans)
{
cf[now]=true;
if(now+arr[now]<n&&!cf[now+arr[now]])
dfs(now+arr[now],sum+1);
if(now-arr[now]>=1&&!cf[now-arr[now]])
dfs(now-arr[now],sum+1);
arr[now]=false;
}
}
int main()
{
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
cin>>arr[i];
cf[a]=true;
dfs(a,0);
if(ans!=100000)
cout<<ans;
else
cout<<-1;
return 0;
}
BFS:
#include<queue>
#include<bits/stdc++.h>
using namespace std;
struct QElement
{
int floor;
int pushcount;
};
queue<QElement> q;
int n,a,b;
int s[1000];
int t[1000]={0};
int main()
{
QElement e1,e2;
int i;
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
cin>>s[i];
e1.floor=a;
e1.pushcount=0;
q.push(e1);
t[a]=1;
while(!q.empty())
{
e2=q.front();
q.pop();
if(e2.floor==b)
break;
i=e2.floor+s[e2.floor];
if(i<=n&&t[i]==0)
{
e1.floor=i;
e1.pushcount=e2.pushcount+1;
q.push(e1);
t[i]=1;
}
i=e2.floor-s[e2.floor];
if(i>=1&&t[i]==0)
{
e1.floor=i;
e1.pushcount=e2.pushcount+1;
q.push(e1);
t[i]=1;
}
}
if(e2.floor==b)
cout<<e2.pushcount;
else
cout<<-1;
return 0;
}