求大佬救救这样写为啥不对
查看原帖
求大佬救救这样写为啥不对
447562
像素旋转楼主2021/4/22 15:02
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct eleva{
	int id;
	int val;
};
int N, A, B;
eleva k[205]{0};
void bfs();
int visited[205]{0};
int ans = 0,flag=0;
queue<eleva> p;
int main(void) {
	memset(visited, -1, sizeof(visited));
	cin >> N >> A >> B;
	for (int i = 1; i <= N; i++) {
		cin >> k[i].val;
		k[i].id = i;
	}
	p.push(k[A]);
	bfs();
	if (visited[B] != -1)
		cout << ans << endl;
	else
		cout << -1 << endl;
	return 0;
}
void bfs() {
	while (!p.empty()) {
		eleva a = p.front();//获得拓展
		p.pop();
		if (a.id == B)break;
		if (visited[a.id] != -1) //访问过了
			continue;
		if (a.id + a.val > N && a.id - a.val < 1)continue;
		if (a.id + a.val <= N) {
			visited[a.id + a.val] = 1;
			p.push(k[a.id + a.val]);
		}
		if (a.id - a.val >= 1) {
			visited[a.id - a.val] = 1;
			p.push(k[a.id - a.val]);
		}
		ans++;
	}
	return;
}
2021/4/22 15:02
加载中...