package Algorithm.P2178;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class P2178 {
static int N,M;
static int[][] map;
static boolean[][] visited;
// 방향
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/Algorithm/P2178/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
// 미로 생성
for(int i = 0; i < N; i++){
String[] s = br.readLine().split("");
for(int j =0; j < M; j++){
map[i][j] = Integer.parseInt(s[j]);
}
}
visited = new boolean[N][M];
visited[0][0] = true;
bfs(0,0);
System.out.println(map[N-1][M-1]);
}
public static void bfs(int x, int y){
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{x, y});
while(!q.isEmpty()) {
int cur[] = q.poll();
int curX = cur[0];
int curY = cur[1];
for(int i = 0; i < 4; i++){
int nextX = curX + dx[i];
int nextY = curY + dy[i];
// map의 범위를 넘어서 갈 수 없음
if (nextX < 0 || nextY < 0 || nextX >= N || nextY >= M)
continue;
// 이미 방문했거나, 0이라서 방문할 수 없음
if (visited[nextX][nextY] || map[nextX][nextY] == 0)
continue;
// 추후 이동할 큐
q.add(new int[]{nextX, nextY});
map[nextX][nextY] = map[curX][curY] + 1; // 다음에 밟을 칸에 가중치를 둠
visited[nextX][nextY] = true;
}
}
}
}
아직 BFS가 익숙하지 않다.