문제
N×M크기의 배열로 표현되는 미로가 있다.
1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 1 |
미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오.
위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다.
https://www.acmicpc.net/problem/2178
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int[][] graph = new int[100][100]; static boolean[][] visited = new boolean[100][100]; static int n = 0; static int m = 0; static int len[] = { 0, 0, 1, -1 }; static int wid[] = { 1, -1, 0, 0 }; public static void main(String[] args) { Scanner input = new Scanner(System.in); n = input.nextInt(); m = input.nextInt(); String nString = ""; for (int i = 0; i < n; i++) { nString = input.next(); for (int j = 0; j < m; j++) { graph[i][j] = Integer.parseInt(nString.charAt(j) + ""); } } for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { visited[i][j] = false; } } find(); } private static void find() { int roadCount = 0; int qSize; int temp; int r; int c; int finish = 0; Queue<Integer> q = new LinkedList<Integer>(); q.offer(0); while (finish != 1) { qSize = q.size(); for (int i = 0; i < qSize; i++) { temp = q.poll(); r = temp / 100; c = temp % 100; if (r == n - 1 && c == m - 1) { roadCount++; System.out.println(roadCount); finish = 1; } for (int j = 0; j < 4; j++) { int nr = r + wid[j]; int nc = c + len[j]; if (nr >= n || nr < 0 || nc >= m || nc < 0) continue; if (graph[nr][nc] == 0) continue; if (visited[nr][nc]) continue; visited[nr][nc] = true; q.offer(nr * 100 + nc); } } roadCount++; } } } | cs |
'CS > Algorithm' 카테고리의 다른 글
[Algorithm] TSP 세일즈맨 알고리즘 (0) | 2017.06.28 |
---|---|
[Java] 백준9663 N-Queen (0) | 2017.05.21 |
[Java] 백준 2252 쉬운 위상정렬 (0) | 2017.05.21 |
[Java] 백준 1005 위상정렬 (0) | 2017.05.21 |
[Java] 백준 1260 DFS BFS (0) | 2017.04.07 |