1+ package bfs .silver .silver_2 ;
2+
3+ import java .io .*;
4+ //import java.util.Arrays;
5+ import java .util .LinkedList ;
6+ import java .util .Queue ;
7+ import java .util .StringTokenizer ;
8+
9+ public class _11060 {
10+
11+ private static int n ;
12+ private static int result = -1 ;
13+
14+ private static int [] maze ;
15+ private static boolean [] visited ;
16+
17+ public static void main (String [] args ) throws IOException {
18+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
19+ BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (System .out ));
20+ StringTokenizer st ;
21+
22+ n = Integer .parseInt (br .readLine ());
23+
24+ maze = new int [n ];
25+ visited = new boolean [n ];
26+
27+ st = new StringTokenizer (br .readLine ());
28+ for (int i = 0 ; i < n ; i ++) {
29+ maze [i ] = Integer .parseInt (st .nextToken ());
30+ }
31+
32+ bfs ();
33+
34+ bw .write (String .valueOf (result ));
35+ bw .flush ();
36+ bw .close ();
37+ }
38+
39+ private static void bfs () {
40+ Queue <int []> queue = new LinkedList <>();
41+ queue .add (new int [] {0 , 0 });
42+ visited [0 ] = true ;
43+
44+ while (!queue .isEmpty ()) {
45+ int [] cur = queue .poll ();
46+
47+ if (cur [0 ] == n - 1 ) {
48+ result = cur [1 ];
49+ return ;
50+ }
51+
52+ for (int i = cur [0 ] + 1 ; i <= cur [0 ] + maze [cur [0 ]] && i < n ; i ++) {
53+ if (!visited [i ]) {
54+ visited [i ] = true ;
55+ queue .add (new int [] {i , cur [1 ] + 1 });
56+ }
57+ }
58+ }
59+ }
60+
61+ /* Dynamic Programming */
62+ // public static void main(String[] args) throws IOException {
63+ // BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
64+ // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
65+ // StringTokenizer st;
66+ //
67+ // int n = Integer.parseInt(br.readLine());
68+ // int[] arr = new int[1001];
69+ // int[] dp = new int[1101];
70+ //
71+ // st = new StringTokenizer(br.readLine());
72+ // for(int i = 1; i <= n; i++) arr[i] = Integer.parseInt(st.nextToken());
73+ // Arrays.fill(dp, Integer.MAX_VALUE);
74+ //
75+ // dp[1] = 0;
76+ // for(int i = 1; i <= n; i++) {
77+ // if (dp[i] == Integer.MAX_VALUE) continue;
78+ //
79+ // for(int j = 1; j <= arr[i]; j++) {
80+ // dp[i + j] = Math.min(dp[i + j], dp[i] + 1);
81+ // }
82+ // }
83+ // if(dp[n] == Integer.MAX_VALUE) bw.write("-1");
84+ // else bw.write(String.valueOf(dp[n]));
85+ //
86+ // bw.flush();
87+ // bw.close();
88+ // }
89+
90+ }
0 commit comments