6 条题解

  • 0
    @ 2025-3-27 18:07:17
    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;
    }
    
    

    信息

    ID
    85
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    776
    已通过
    174
    上传者