https://www.luogu.com.cn/problem/P1135
题目复制过来格式就乱了,所以不复制了
又是一道bfs的水题
dis数组,用来保存每一层可移动的距离
steps数组,到达该层需要多少步
java代码如下:
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int star = scanner.nextInt()-1;
int end = scanner.nextInt()-1;
int[] dis = new int[size];
for (int i = 0; i < dis.length; i++) {
dis[i] = scanner.nextInt();
}
int[] steps = new int[size];
for (int i = 0; i < steps.length; i++) {
steps[i] = -1;
}
steps[star] = 0;
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(star);
while(!queue.isEmpty()) {
int now = queue.poll();
int up = now + dis[now];
int down = now - dis[now];
if (up < size && steps[up] == -1) {
steps[up] = steps[now] + 1;
queue.add(up);
}
if (down >= 0 && steps[down] == -1) {
steps[down] = steps[now] + 1;
queue.add(down);
}
}
System.out.println(steps[end]);
}
}