1 条题解

  • 0
    @ 2023-6-11 12:21:11

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    int q[210][3],head=1,tail=1;
    int a[210];
    bool f[210];
    int n,x,y,i; 
    int main(){
    	cin>>n>>x>>y;
    	for(i = 1;i <= n;i++){
    		cin>>a[i];
    	}
    	//如果不需要移动楼层 
    	if(x == y){
    		cout<<0;
    		return 0;
    	}
    	
    	q[1][1] = x;
    	q[1][2] = 0;//次数
    	f[x] = true;//该层到过了
    	
    	while(head <= tail){
    		int flag = 1;
    		for(int i = 1;i <= 2;i++){
    			int to = q[head][1] + a[q[head][1]] * flag;
    			//是正常的楼层,且没走过 
    			if(to >= 1 && to <= n && f[to] == false){
    				tail++;
    				q[tail][1] = to;
    				q[tail][2] = q[head][2] + 1;
    				f[to] = true;
    				
    				if(to == y){
    					cout<<q[tail][2];
    					return 0;
    				}
    			}
    			
    			flag = flag * -1;
    		}
    		head++;
    	} 
    	cout<<-1;
    }
    
    
    
    • 1

    信息

    ID
    2696
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者