求助,回复必关
查看原帖
求助,回复必关
1349586
bole_zhangshichen楼主2025/1/23 10:36

怎么判断能不能到啊,求助

#include<bits/stdc++.h>
using namespace std;
int n,a,b;
int ans[250];//下标:楼层,至少按几次按钮
int que[250];//队列,下标:序列
int l,r;//指向队列起点、终点的指针
int shuzi[250];// 每个电梯的数字 
int main(){
	cin>>n>>a>>b;
	memset(ans,127,sizeof(ans));//都无法到达 
	for(int i=1;i<=n;i++){
		cin>>shuzi[i];
	} 
	ans[a]=0;//起点至少按0次按钮 
	l=1;
	que[l]=a;//将a点入队 
	r=2;//准备存入扩散点
	while(l<r){
		int x=que[l];//扩散点
		int y=x+shuzi[x] ;
		int z=x-shuzi[x];
		if(y<=n){
			if(ans[y]>ans[x]+1){
			    ans[y]=ans[x]+1;
			    que[r]=y;//目标点入队列
				r++;//终点指针+1 
		    }
		}
		if(z>0){
			if(ans[z]>ans[x]+1){
				ans[z]=ans[x]+1;
				que[r]=z;//目标点入队列
				r++;//终点指针+1 
			}
		} 
		l++;//x已经被用过了  x出队列 
	} 
	if(ans[b]!=0) cout<<ans[b];
	else cout<<"-1";
	return 0;
}
2025/1/23 10:36
加载中...