public class Num2 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a=sc.nextInt();
int b=sc.nextInt();
int[] k=new int[n+1];
for(int i=1;i<=n;i++)
k[i]=sc.nextInt();
System.out.println(bfs(k,a,b));
}
public static int bfs(int[] k,int a,int b){
if(a==b)
return 0;
int n=k.length-1;
Queue<Integer> q=new LinkedList<Integer>();
q.offer(a);
int step=0;
boolean[] isz=new boolean[n+1];
while(!q.isEmpty()){
int size=q.size(); //size=(队尾-队头+数组长度)%数组长度
for(int i=0;i<size;i++){
int cur=q.poll();
isz[cur]=true;
if(cur+k[cur]==b||cur-k[cur]==b)
return step+1;
if(cur+k[cur]<=n&&!isz[cur+k[cur]])
q.offer(cur+k[cur]);
if(cur-k[cur]>0&&!isz[cur-k[cur]])
q.offer(cur-k[cur]);
}
step++;
}
return -1;
}
}
洛谷p1135 bfs 最近在刷洛谷的题,小白一枚。希望在这里记录自己的成长。
于 2023-03-05 11:18:34 首次发布
该代码实现了一个基于广度优先搜索(BFS)的方法,从数组中的一点开始寻找目标值。它接受一个整数数组k,起始点a和目标点b,通过BFS算法在数组中找到从a到b的最短路径,如果存在则返回步数,否则返回-1。
摘要由CSDN通过智能技术生成