0
已解决
姚文涛
中级守护
中级守护
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<vector>
#include<string>
#include<stack>
#include<cstdlib>
using namespace std;
int k[10001];
int n,a,b;
int min_count=100001011;
void go(int a,int count){
if(a==b){
if(count<min_count){
min_count=count;
}
return;
}
if(a+k[a]<=n)go(a+k[a],count++);
if(a-k[a]>=1)go(a-k[a],count++);
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>k[i];
}
if(a+k[a]<=n)go(a+k[a],0);
if(a-k[a]>=1)go(a-k[a],0);
cout<<min_count<<endl;
return 0;
}
/*
3 3 1 2 5
1 1
4 2
2 3
5 4
*/
1
已采纳
印无忧
新手守护
新手守护
核心代码应该是这样的吧:
const int dir[2]= {1,-1};
while (!q.empty())
{
coord now=队头;
弹出;
if (now.x==b) 返回;
for (int i=0; i<2; i++)
{
int nx=now.x+dir[i]*a[now.x];
if (判断)
{
标记
把nx与count+1进队
}
}
0
0
姚文涛
中级守护
中级守护