728x90
반응형
https://www.acmicpc.net/problem/2178
728x90
이 문제에서는 고려해야할 것이
현재 노드가 방문한 노드인지 확인하는 로직이 필요하고,
또 현재 노드의 좌표가 도착점 좌표와 같을 때 BFS 탐색을 종료하고 찾은 개수를 출력하면 된다.
if(visit[cur.y][cur.x]) continue;
visit[cur.y][cur.x] = true;
if(cur.y == N -1 && cur.x == M - 1) {
cnt = cur.step;
return;
}
반응형
아래는 완성된 소스코드이다.
package bfs;
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 MazeSearch {
static int[] dy = {1, 0, -1, 0};
static int[] dx = {0, 1, 0, -1};
static int[][] map;
static boolean[][] visit;
static int N, M, cnt;
static class Node {
int y, x, step;
public Node(int y, int x, int step) {
this.y = y;
this.x = x;
this.step = step;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = stoi(st.nextToken());
M = stoi(st.nextToken());
map = new int[N][M];
visit = new boolean[N][M];
for (int i = 0; i < N; i++) {
String[] arr = br.readLine().split("");
for (int j = 0; j < M; j++) {
map[i][j] = stoi(arr[j]);
}
}
bfs();
System.out.println(cnt);
}
public static void bfs() {
Queue<Node> q = new LinkedList<Node>();
q.add(new Node(0, 0, 1));
while(!q.isEmpty()) {
Node cur = q.poll();
if(visit[cur.y][cur.x]) continue;
visit[cur.y][cur.x] = true;
if(cur.y == N -1 && cur.x == M - 1) {
cnt = cur.step;
return;
}
for (int dir = 0; dir < 4; dir++) {
int ny = cur.y + dy[dir];
int nx = cur.x + dx[dir];
if(ny < 0 || ny >= N || nx < 0 || nx >= M) continue;
if(visit[ny][nx] || map[ny][nx] != 1) continue;
int step = cur.step + 1;
q.add(new Node(ny, nx, step));
}
}
}
public static int stoi(String str) {
return Integer.parseInt(str);
}
}
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/java] 2206번: 벽 부수고 이동하기 - BFS (0) | 2021.08.17 |
---|---|
[백준/java] 1010번: 다리 놓기 - 조합(Combination), 파스칼의 삼각형 (0) | 2021.08.16 |
[백준/java] 2667번 :단지번호붙이기 - BFS (0) | 2021.08.16 |
[백준/java] 7569번 : 토마토(3차원배열) BFS (0) | 2021.08.15 |
[백준/java] 7562번 : 나이트의 이동(체스 나이트의 이동) - BFS (0) | 2021.08.15 |
댓글