코딩테스트/백준

백준 2178 : 미로 탐색 _자바 Java

플래시🦥 2023. 1. 31.
반응형

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

 

2178번: 미로 탐색

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

www.acmicpc.net


입력 받은 배열에서

(0,0)에서 다른 좌표로 이동했을 때 그 좌표까지 이동 했을 때 이동 거리를 대입.

 

import java.io.*;
import java.util.*;

public class Main {

	static int N, M;
	static int[][] arr;
	static boolean[][] check;
	static int[] moveX = { 0, 0, 1, -1 };
	static int[] moveY = { 1, -1, 0, 0 };
	static Queue<point> q = new LinkedList<>();

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String[] str = br.readLine().split(" ");
		N = Integer.parseInt(str[0]);
		M = Integer.parseInt(str[1]);
		arr = new int[N][M];
		check = new boolean[N][M];

		for (int i = 0; i < N; i++) {
			String[] s = br.readLine().split("");
			for (int j = 0; j < M; j++) {
				arr[i][j] = Integer.parseInt(s[j]);
			}
		}

		check[0][0] = true;
		bfs(0, 0);
		System.out.println(arr[N - 1][M - 1]);

		br.close();

	}// main()

	public static void bfs(int x, int y) {

		q.add(new point(x, y));

		while (!q.isEmpty()) {
			point s = q.poll();
			for (int i = 0; i < 4; i++) {
				int nextX = s.x + moveX[i];
				int nextY = s.y + moveY[i];

				if (nextX < 0 || nextY < 0 || nextX >= N || nextY >= M) {
					continue;
				}
				if (check[nextX][nextY] || arr[nextX][nextY] == 0) {
					continue;
				}
				q.add(new point(nextX, nextY));
				arr[nextX][nextY] = arr[s.x][s.y] + 1;
				check[nextX][nextY] = true;
			}
		}
	}

}// bfs()

class point {
	int x;
	int y;

	point(int x, int y) {
		this.x = x;
		this.y = y;
	}// class point

}// class Main
728x90
반응형

댓글