30pts c++
查看原帖
30pts c++
1320784
yinzixia楼主2024/11/1 20:25
#include<bits/stdc++.h>
using namespace std;
struct dt{
	int a;//楼层
	int c;//可上或下的数
};
queue<dt> q;
int vis[205]={0};
int main(){
	dt sz[205]={};
	int n,be,en;
	cin>>n>>be>>en;
	for(int i=1;i<n;i++){
		cin>>sz[i].c;
		sz[i].a=i;
	}
	int ans=0;
	bool flag=0;
	q.push(sz[be]);
	if(be==en){
		cout<<0;
		return 0;
	}
	while(q.empty()!=true){
		if(q.front().a+q.front().c<=n&&vis[q.front().a+q.front().c]!=1){
			q.push(sz[q.front().a+q.front().c]);
			vis[q.front().a+q.front().c]=1;
			if(q.front().a+q.front().c==en){
				//cout<<"god like!"<<endl;
				flag=1;
				break;
			}
		}
		if(q.front().a-q.front().c>=1&&vis[q.front().a-q.front().c]!=1){
			q.push(sz[q.front().a-q.front().c]);
			vis[q.front().a-q.front().c]=1;
			if(q.front().a-q.front().c==en){
				//cout<<"god like!"<<endl;
				flag=1;
				break;
			}
		}
		q.pop();
		ans++;
	}
	if(flag==1)cout<<ans;
	else cout<<-1;//5 1 5
	return 0;//3 3 1 2 5
}
2024/11/1 20:25
加载中...