https://www.acmicpc.net/problem/2178
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
public class Main {
static int n,m, count;
static char[][] maze;
static boolean[][] vis;
static int[] dx = {0,1,0,-1};
static int[] dy = {1,0,-1,0};
static int[][] dis;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
maze = new char[n+1][m+1];
vis = new boolean[n+1][m+1];
for(int i=1;i<=n;i++){
String s = br.readLine();
for(int j=1;j<=m;j++){
maze[i][j] = s.charAt(j-1);
}
}
bfs(1,1);
System.out.println(dis[n][m]);
}
static void bfs(int x, int y){
dis = new int[n+1][m+1];
ArrayDeque<int[]> q = new ArrayDeque<>();
vis[x][y] = true;
q.add(new int[]{x,y});
dis[x][y] = 1;
while(!q.isEmpty()){
int[] c = q.poll();
for(int d=0;d<4;d++){
int nx = c[0]+dx[d];
int ny = c[1]+dy[d];
if(nx<1||nx>n||ny<1||ny>m||vis[nx][ny]|| maze[nx][ny] == '0') continue;
dis[nx][ny] = dis[c[0]][c[1]]+1;
vis[nx][ny] = true;
q.add(new int[]{nx,ny});
}
}
}
}
토마토 문제처럼 풀면 됨