[백준] 2178* 미로 탐색 (실버1)

AI·2025년 9월 18일

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});

            }

        }
    }
}

토마토 문제처럼 풀면 됨

0개의 댓글