以下是我(本蒟蒻)的DFS代码,通过调试只能达到80pt(#9,#10 WA),但是不知道为什么深度遍历不能做到?而通过广度遍历可以达成???
#include<iostream>
using namespace std;
int dx[2] = {1,-1};
int a,b,n,sx;
long long cnt = 0;
int arr[205];
int st[205];
int flag = 0;
int mincnt = 1e6;
void DFS(int x)
{
if(x == b)
{
flag = 1;
if(cnt <= mincnt)
mincnt = cnt;
return;
}
else
{
for(int i = 0;i < 2;i++)
{
sx = x + arr[x]*dx[i];
if(sx >= 1 && sx <= b && !st[sx])
{
cnt++;
st[sx] = 1;
DFS(sx);
cnt--;
}
}
}
}
int main()
{
cin >> n >> a >> b;
for(int i = 1;i <= n;i++)
cin >> arr[i];
DFS(a);
if(flag)
cout << mincnt;
else
cout << -1;
return 0;
}