返回题解分享
讨论 / 题解分享/ 帖子详情

奇怪的电梯 - 题解

using namespace std;
int n,a,b;
int k[202];
bool visit[202]={0};//标记数组 
int fuhao[3]={0,1,-1};
int flag,sum=0; 
int ceng=1,jie=0,xia=0;//当前层节点数量,当前层遍历到第几个节点 
queue<int> q;

void bfs()
{
	q.push(a);//当前楼层进入队列
	visit[a]=1; 
	while(!q.empty()){
		int c=q.front();//取出队列第一个元素 
		if(c!=b) q.pop(); 
		else {
			flag=1;//输出次数 
			return;
		}	
		for(int i=1;i<=2;i++)
		{
			int d=c+fuhao[i]*k[c];
			if(d>=1 && d<=n && !visit[d])
			{
				visit[d]=1;
				q.push(d);
				xia++;//记录下一层节点个数 
			}
			
		}
		jie++;	//遍历的节点数加一,直到该层遍历完,层数加一
		if(jie==ceng) 
		{
			ceng=xia;
			xia=0;
			jie=0; 
			sum++;
		}
	}	
	return;
}

int main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++){
		cin>>k[i];
	}
	flag=0;
	sum=0;
	bfs();
	if(flag==0){
		cout<<-1;
	}
	else cout<<sum;
	return 0;
}
0 回复 0 转发 0 喜欢 7 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!