题目大意:
从1楼开始。在1楼,按“上”可以到4楼,按“下”是不起作用的,因为没有 -2楼。那么,从 A 楼到 B楼至少要按几次按钮呢?
思路:
定义:
有标记数组,表示楼层的A,B,以及一个f数组和a数组
广度优先搜索:
首先把标记数组定为1,然后选择-a[u]这种方式
接着判断标记数组是否和解,然后输出
主函数:
输入楼层,以及非负整数
然后调用bfs
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 205;
int f[N], a[N], n, A, B;
bool vis[N];
queue<int>q;
void bfs() {
vis[A] = true;
f[A] = 0;
q.push(A);
while (q.size() > 0) {
int u = q.front(); q.pop();
int v = u - a[u]; // 选择-a[u]这种方式
if (v >= 1 && !vis[v]) {
vis[v] = true;
f[v] = f[u] + 1; // 步时+1
q.push(v);
}
v = u + a[u];
if (v <= n && !vis[v]) {
vis[v] = true;
f[v] = f[u] + 1; // 步时+1
q.push(v);
}
}
if (vis[B]) cout << f[B]; else cout << "-1";
}
int main() {
cin >> n >> A >> B;
for (int i = 1; i <= n; i++) cin >> a[i];
bfs();
return 0;
}