算法:BFS
思路:
我们把此电梯问题看作是一张图,从一个楼层到另一个楼层看作一条路,此题便可以转化成搜索一张图,求最短路,注意一点,如果起点和目的地一样的话,直接输出0
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int a, b;
int n;
int q[201];
int dep[201];
int vis[201];
int ans = 0;
int num[205];
void bfs(int s)
{
int h = 0, t = 1;
q[h] = s;
dep[h] = 0;
vis[s] = 1;
while (h < t)
{
int now = q[h];
h++;
if (now == b)
{
ans = dep[h - 1];
break;
}
if (now + num[now] <= n && !vis[now + num[now]])
{
dep[t] = dep[h - 1] + 1;
q[t++] = now + num[now];
vis[now + num[now]] = 1;
}
if (now - num[now] >=1 && !vis[now - num[now]])
{
dep[t] = dep[h - 1] + 1;
q[t++] = now - num[now];
vis[now - num[now]] = 1;
}
}
}
int main()
{
cin >> n >> a >> b;
for (int i = 1; i <= n; i++)
{
cin >> num[i];
}
bfs(a);
if (a == b)
cout << 0;
else if (ans == 0)
{
cout << -1;
}
else cout << ans;
return 0;
}