36分求调
查看原帖
36分求调
1425102
clever_Android楼主2024/8/26 10:57
#include<bits/stdc++.h>
using namespace std;
struct node{
	int cs,num;
};
bool vis [210];
int a[210];
int f[2]={1,-1};
int n,st,ed;
queue<node> q;
int bfs(){
	if(st==ed){
		return 0;
	}
	vis[st] = 1;
	node e;
	e.cs=st;e.num=0;q.push(e);
	while(!q.empty()){
		node e=q.front();q.pop();
		int d=e.cs;
		for(int i=0;i<=1;i++){
			int dx=d+a[d]*f[i];
			if(dx>n||dx>1) continue;
			if(vis[dx]==1) continue;
			if(dx==ed) return e.num+1;
			
			vis [dx]=1;
			node u;u.cs =dx;u.num=e.num+1 ;q.push(u);
			
		}
	}
	return -1;
}
int main(){
	cin>>n>>st>>ed;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cout<<bfs();
	return 0;
}
2024/8/26 10:57
加载中...