各位,还是错怎么办?求助!
查看原帖
各位,还是错怎么办?求助!
1016748
Wangyuqi2010楼主2024/2/25 16:14

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct coord {
	int floor,num;
};
coord s[201];
int step[201];
bool flag[201];
int n,a,b;
queue<coord>q;
int main() {
	memset(flag,true,sizeof(flag));
	memset(step,-1,sizeof(step));
	cin>>n>>a>>b;
	for(int i=1; i<=n; i++) {
		cin>>s[i].num;
		s[i].floor=i;
	}
	step[a]=0;
	flag[a]=false;
	q.push(s[a]);
	//bfs部分 
	while(!q.empty()) {
		coord now=q.back();
		q.pop();
		int nf=now.floor,nu=now.num;
		//------
		int nf1=nf-nu;
		int nf2=nf+nu;
		if(nf1>=1&&flag[nf1]) {
			q.push(s[nf1]);
			step[nf1]=step[nf] + 1;
			flag[nf]=false;
		}
		if(nf2<n&&flag[nf2]) {
			q.push(s[nf2]);
			step[nf2]=step[nf] + 1;
			flag[nf]=false;
		}
		if(nf==b){
			cout<<step[b];
			return 0;
		}
	}
	cout<<step[b];
	return 0;
}
2024/2/25 16:14
加载中...