-
[Java] 백준 2178 미로 탐색Programming/Algorithm 2021. 2. 25. 20:13
문제
(1,1)에서 (N,M)으로 이동하는 최단경로를 구하는 문제이다.
풀이
BFS로 map을 탐색하며 이동거리로 map을 초기화 했다.
map[n][m]이 1이 아니게 되면 가장 먼저 도착지점에 다다른 것이므로 break하고 이동거리를 출력하도록 했다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int N, M; static int[][] map; static int AVAILABLE = 1; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); map = new int[N][M]; for (int i = 0; i < N; i++) { String s = br.readLine(); for (int j = 0; j < M; j++) { map[i][j] = s.charAt(j) - '0'; } } System.out.println(BFS()); } static int BFS() { int[] dx = {-1, 1, 0, 0}; int[] dy = {0, 0, -1, 1}; Queue<int[]> queue = new LinkedList<>(); queue.add(new int[]{0, 0}); map[0][0] = 2; while (!queue.isEmpty()) { int[] point = queue.poll(); for (int i = 0; i < 4; i++) { int nx = point[0] + dx[i]; int ny = point[1] + dy[i]; if (isRange(nx, ny) && map[nx][ny] == AVAILABLE) { queue.add(new int[]{nx, ny}); map[nx][ny] = map[point[0]][point[1]] + 1; } } if (map[N - 1][M - 1] != AVAILABLE) break; } return map[N - 1][M - 1] - 1; } static boolean isRange(int x, int y) { if (x < 0 || x >= N || y < 0 || y >= M) return false; return true; } }
채점결과
'Programming > Algorithm' 카테고리의 다른 글
[Java] 백준 1654 랜선 자르기 (0) 2021.03.03 [알고리즘 이론] 이진 탐색 알고리즘 (0) 2021.03.02 [Java] 백준 2146 다리만들기 (0) 2021.02.25 [Java] 백준 7576 토마토 (0) 2021.02.23 [Java] 백준 4963 섬의 개수 (0) 2021.02.23 댓글