求助!!!2个WA,6个TLE,2个AC。
查看原帖
求助!!!2个WA,6个TLE,2个AC。
481471
Eric12楼主2021/7/24 18:37
#include <iostream>
#include <queue>
using namespace std;
int n,a,b,numbers[10001];//numbers数组尽量大一些。 
struct node
{
	int step,layer,num;
	//step:按钮次数,layer:第几层,num:那层上的数字。 
	void cj(int a,int b,int c)//哈哈,偷懒。 
	{
		step=a;
		layer=b;
		num=c;
	}
};
void bfs()
{
	queue<node>q; 
	node abc={0,1,numbers[1]};
	q.push(abc);
	int zancun;
	node zancun2;
	while(q.size()&&q.front().layer!=b)
	{
		//上楼。
		zancun=q.front().layer+q.front().num;
		if(zancun<=n)
		{
			abc.cj(q.front().step+1,zancun,numbers[zancun]);
			q.push(abc);
		}
		//下楼。 
		zancun=q.front().layer-q.front().num;
		if(zancun>=0)
		{
			abc.cj(q.front().step+1,zancun,numbers[zancun]);
			q.push(abc);
		}
		zancun2=q.front();
		q.pop(); 
	}
	if(q.empty())//所有楼层都走完,直接输出-1。 
		cout<<-1<<endl;
	else
		cout<<zancun2.step<<endl;
}
int main()
{
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++)
		cin>>numbers[i];
	bfs();
	return 0;
}
2021/7/24 18:37
加载中...