求助 P1135
因为不是很会写广搜于是我就打了深搜
但wa了2个点
思路:
能往上走就往上走,否则往下走。将每种情况都遍历一遍。如果没有输出-1。
code
#include <bits/stdc++.h>
using namespace std;
int a,b,ans=INT_MAX,n,bu,k[10005];
bool f[10005];
void dfs(int l,int cnt)
{
if(l==b)
{
ans=min(cnt,ans);
return ;
}
if((l+k[l])<=n&&f[l+k[l]]==0)
{
f[l+k[l]]=1;
dfs(l+k[l],cnt+1);
f[l+k[l]]=0;
}
if(l-k[l]>0&&f[l-k[l]]==0)
{
f[l-k[l]]=1;
dfs(l-k[l],cnt+1);
f[l+k[l]]=0;
}
}
int main()
{
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
cin>>k[i];
dfs(a,0);
if(ans==INT_MAX)
{
cout<<-1;
return 0;
}
cout<<ans;
return 0;
}
那些大佬可以帮帮本蒟蒻,谢谢!