1
+ package BFS .P7576 ;
2
+
3
+ import java .io .BufferedReader ;
4
+ import java .io .FileInputStream ;
5
+ import java .io .InputStreamReader ;
6
+ import java .util .Arrays ;
7
+ import java .util .LinkedList ;
8
+ import java .util .Queue ;
9
+ import java .util .StringTokenizer ;
10
+
11
+ public class Main {
12
+
13
+ static int M , N ;
14
+ static int [][] box ;
15
+
16
+ static int [] di = {-1 , 0 , 1 , 0 };
17
+ static int [] dj = {0 , 1 , 0 , -1 };
18
+
19
+ static Queue <Position > q = new LinkedList <>();
20
+ static int ans = -1 ;
21
+
22
+ public static void main (String [] args ) throws Exception {
23
+ System .setIn (new FileInputStream ("src/BFS/P7576/input.txt" ));
24
+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
25
+ StringTokenizer st = new StringTokenizer (br .readLine ());
26
+
27
+ M = Integer .parseInt (st .nextToken ());
28
+ N = Integer .parseInt (st .nextToken ());
29
+
30
+ box = new int [N ][M ];
31
+ for (int i = 0 ; i < N ; i ++) {
32
+ st = new StringTokenizer (br .readLine ());
33
+ for (int j = 0 ; j < M ; j ++) {
34
+ box [i ][j ] = Integer .parseInt (st .nextToken ());
35
+ if (box [i ][j ] == 1 ) q .offer (new Position (i , j ));
36
+ }
37
+ }
38
+
39
+ while (!q .isEmpty ()) {
40
+ ans ++;
41
+ if (checkDone ()) break ;
42
+
43
+ int curSize = q .size ();
44
+ for (int i = 0 ; i < curSize ; i ++) {
45
+ Position cur = q .poll ();
46
+ for (int t = 0 ; t < 4 ; t ++) {
47
+ int to_i = cur .i + di [t ];
48
+ int to_j = cur .j + dj [t ];
49
+
50
+ if (isValidPath (to_i , to_j ) && box [to_i ][to_j ] == 0 ) {
51
+ box [to_i ][to_j ] = 1 ;
52
+ q .offer (new Position (to_i , to_j ));
53
+ }
54
+ }
55
+ }
56
+ }
57
+
58
+ if (!checkDone ()) System .out .println (-1 );
59
+ else System .out .println (ans );
60
+ }
61
+
62
+ static boolean isValidPath (int i , int j ) {
63
+ return 0 <= i && i < N && 0 <= j && j < M ;
64
+ }
65
+
66
+ static boolean checkDone () {
67
+ for (int i = 0 ; i < N ; i ++) {
68
+ for (int j = 0 ; j < M ; j ++) {
69
+ if (box [i ][j ] == 0 ) return false ;
70
+ }
71
+ }
72
+ return true ;
73
+ }
74
+ }
75
+
76
+ class Position {
77
+ int i ;
78
+ int j ;
79
+
80
+ public Position (int i , int j ) {
81
+ this .i = i ;
82
+ this .j = j ;
83
+ }
84
+
85
+ @ Override
86
+ public String toString () {
87
+ return "Position{" +
88
+ "i=" + i +
89
+ ", j=" + j +
90
+ '}' ;
91
+ }
92
+ }
0 commit comments