bfs求助
查看原帖
bfs求助
537520
DESTRUCTION_3_2_1楼主2022/1/18 21:59
#include <bits/stdc++.h>
using namespace std;
int n, a, b, tot[250], vis[250], f;
queue < pair <int , int> > Q;//first 代表层数, second 代表步数 
void bfs()
{
	Q.push(make_pair(a , 0));
	while(!Q.empty())
	{
		pair<int , int>front = Q.front();
		Q.pop();
		if(front.first == b)
		{
			f = 1;
			break;
		}
		int change = tot[front.first];//改变的层数 
		int big = front.first + change;//变大后的层数 
		int small = front.first - change;//变小后的层数 
		if (big >= 1 and big <= n and vis[big] == 0)
		{
			vis[big] = 1;
			Q.push(make_pair(big , front.second + 1));
		}
		if (small >= 1 and small <= n and vis[small] == 0)
		{
			vis[small] = 1;
			Q.push(make_pair(small , front.second + 1));
		}
		Q.pop();
	}
}
int main(void)
{
	cin >> n >> a >> b;
	for (int i = 1; i <= n; i++)
		cin >> tot[i];
	bfs();
	cout << (f == 1?Q.front().first:-1);
	return 0;
 } 

40分求神犇告诉错在哪了,样例没过

2022/1/18 21:59
加载中...