delpho
[JAVA, 실버1, bfs] 백준 2178 - 미로 탐색 본문
아주 기본적인 배열 bfs 문제이다!
import java.io.*;
import java.util.*;
public class Main {
static int row,col, map[][];
static boolean[][] isVisited;
static int[] dr = {1,-1,0,0};
static int[] dc = {0,0,-1,1};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
row = Integer.parseInt(st.nextToken());
col = Integer.parseInt(st.nextToken());
map = new int[row][col];
isVisited = new boolean[row][col];
for (int i = 0; i < row; i++) {
String[] s = br.readLine().split("");
for (int j = 0; j < col; j++) {
map[i][j] = Integer.parseInt(s[j]);
}
}
bfs();
System.out.println(map[row-1][col-1]);
}
public static void bfs(){
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{0,0});
isVisited[0][0] = true;
while(!q.isEmpty()){
int[] position = q.poll();
for(int i = 0; i<4; i++){
int mr = position[0] + dr[i];
int mc = position[1] + dc[i];
if(mr<0 || mc<0 || mr>=row || mc >= col ) continue;
if(isVisited[mr][mc] || map[mr][mc] == 0) continue;
q.add(new int[] {mr, mc});
map[mr][mc] = map[position[0]][position[1]] + 1;
isVisited[mr][mc] = true;
}
}
}
}
이 코드를 통해서 이동한 횟수를 구할 수 있다.
map[mr][mc] = map[position[0]][position[1]] + 1;
'알고리즘 > BFS, DFS' 카테고리의 다른 글
[골드3, BFS+PQ] 백준 16236 - 아기 상어 (자바) (0) | 2024.04.11 |
---|---|
[골드3, BFS] 백준 2206 - 벽 부수고 이동하기 (자바) (0) | 2024.04.09 |
[골드4, BFS] 백준 16234 - 인구이동 (자바) (1) | 2024.02.27 |
[골드 5, BFS] 백준 7576 - 토마토 (자바) (0) | 2024.02.19 |
[JAVA] 백준 3085 - 사탕 게임 (0) | 2022.03.07 |