五级算法题答案

const int N = 10001;
int  a[N],m[N][2],vis[N][2],ans[N],n,k;
void bfs(){
	queue <int> q;
	q.push(1);
	while(!q.empty()){
		int tmp=q.front();
		if(tmp==k){
			cout<<ans[tmp];
			return;
		}
		q.pop();
		if(!vis[tmp][0]){
			if(m[tmp][0]!=0){
				q.push(m[tmp][0]);
				vis[tmp][0]=1;
				ans[m[tmp][0]]=ans[tmp]+1;
			}
		}
		if(!vis[tmp][1]){
			if(m[tmp][1]!=0){
				q.push(m[tmp][1]);
				vis[tmp][1]=1;
				ans[m[tmp][1]]=ans[tmp]+1;
			}
		}
	}
	cout<<-1;
}
int main() {
  cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(0<=i-a[i]) m[i][0]=i-a[i];
		if(i+a[i]<=n) m[i][1]=i+a[i];
	}
	bfs();
  
}

4 条评论

  • 1