본문 바로가기
BaekJoon/JAVA

[백준] 2178번 : 미로 탐색(JAVA)

by GrayChoi 2020. 2. 20.
반응형

http://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net


위의 문제는 BaekJoon Online Judge의 단계별로 풀어보기 중 28단계

 

DFS와 BFS의 카테고리에 포함되어 있는 문제이다.

 

import java.util.*;

public class Question_2178 {

	static int[] dx = {0, 1, 0, -1};
	static int[] dy = {1, 0, -1, 0};
	public static int n, m;
	public static int map[][];
	public static boolean visit[][];
	
	public static void bfs(int x, int y) {
		Queue<Integer> qx = new LinkedList<Integer>();
		Queue<Integer> qy = new LinkedList<Integer>();
		
		qx.add(x);
		qy.add(y);
		
		while(!qx.isEmpty() && !qy.isEmpty()) {
			x = qx.poll();
			y = qy.poll();
			visit[x][y] = true;
			
			for(int i = 0; i < 4; i++) {
				int _x = x + dx[i];
				int _y = y + dy[i];
				
				if(_x >= 0 && _y >= 0 && _x < n && _y < m) {
					if(map[_x][_y] == 1 && visit[_x][_y] == false) {
						qx.add(_x);
						qy.add(_y);
						visit[_x][_y] = true;
						map[_x][_y] = map[x][y] + 1;
					}
				}
			}
		}
		
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		n = sc.nextInt();
		m = sc.nextInt();
		
		map = new int[100][100];
		visit = new boolean[100][100];
		
		for(int i = 0; i < n; i++) {
			String temp = sc.next();
			for(int j = 0; j < m; j++) {
				map[i][j] = temp.charAt(j) - 48;
			}
		}
		bfs(0, 0);
		System.out.println(map[n-1][m-1]);
	}
}
반응형

'BaekJoon > JAVA' 카테고리의 다른 글

[백준] 7576번 : 토마토(JAVA)  (0) 2020.02.20
[백준] 1012번 : 유기농 배추(JAVA)  (0) 2020.02.20
[백준] 2217번 : 로프(JAVA)  (0) 2020.02.13
[백준] 11399번 : ATM(JAVA)  (0) 2020.02.12
[백준] 1931번 : 회의실배정(JAVA)  (0) 2020.02.12

댓글