求大佬帮忙
查看原帖
求大佬帮忙
857395
jiangjunhao楼主2024/4/9 19:59
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
struct Node { //定义结构体
	int x, step; //位置和步数
};
queue<Node> que;
int a[N], n, k[N], A, B;
bool vis[N], f; //标记其是否被搜过
void bfs(int x) {
	que.push({x, 0}); //起点入队
	vis[x] = 1;
	while (!que.empty()) { //不为空时循环入队
		Node t = que.front();//获取队首节点
		que.pop();//出队
		for (int i = -1; i <= 1; i += 2) {
			int xx = t.x + i * k[t.x];
			if (xx >= 1 && xx <= n && vis[xx] == 0) {
				vis[xx] = 1;
				que.push({xx, t.step + 1});
			}
			if (xx == B) {
				f = 1;
				break;
			}
		}
		if (f) break;
	}
}
int main() {
	cin >> n >> A >> B;
	for (int i = 1; i <= n; i++) {
		cin >> k[i];
	}
	bfs(A);
	cout << que.back().step;
	return 0;
}
2024/4/9 19:59
加载中...