π·πΌλͺ¨μ¬λ΄μ κ°λ°μμ²π·πΌ
[JAVA/μ½λ©ν μ€νΈ] ν λ§ν (BFS νμ©) λ³Έλ¬Έ
[JAVA/μ½λ©ν μ€νΈ] ν λ§ν (BFS νμ©)
μμΌμ΄ 2022. 3. 18. 21:50μ€λͺ
νμμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€.
ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μ λͺ¨μ μμμ μΉΈμ νλμ© λ£μ΄μ μ°½κ³ μ 보κ΄νλ€.
μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄,
μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€.
νλμ ν λ§ν μ μΈμ ν κ³³μ μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ λ€ λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°,
ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. νμλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§, κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ,
λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
μ λ ₯
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M, Nμ΄ μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ,
N μ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 ≤ M, N ≤ 1,000 μ΄λ€.
λμ§Έ μ€λΆν°λ νλμ μμμ μ μ₯λ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ§λ€.
μ¦, λμ§Έ μ€λΆν° Nκ°μ μ€μλ μμμ λ΄κΈ΄ ν λ§ν μ μ λ³΄κ° μ£Όμ΄μ§λ€.
νλμ μ€μλ μμ κ°λ‘μ€μ λ€μ΄μλ ν λ§ν μ μνκ° Mκ°μ μ μλ‘ μ£Όμ΄μ§λ€.
μ μ 1μ μ΅μ ν λ§ν , μ μ 0μ μ΅μ§ μμ ν λ§ν , μ μ -1μ ν λ§ν κ° λ€μ΄μμ§ μμ μΉΈμ λνλΈλ€.
μΆλ ₯
μ¬λ¬λΆμ ν λ§ν κ° λͺ¨λ μ΅μ λκΉμ§μ μ΅μ λ μ§λ₯Ό μΆλ ₯ν΄μΌ νλ€.
λ§μ½, μ μ₯λ λλΆν° λͺ¨λ ν λ§ν κ° μ΅μ΄μλ μνμ΄λ©΄ 0μ μΆλ ₯ν΄μΌ νκ³ ,
ν λ§ν κ° λͺ¨λ μ΅μ§λ λͺ»νλ μν©μ΄λ©΄ -1μ μΆλ ₯ν΄μΌ νλ€.
μμ μ λ ₯ 1
6 4
0 0 -1 0 0 0
0 0 1 0 -1 0
0 0 -1 0 0 0
0 0 0 0 -1 1
μμ μΆλ ₯ 1
4
import java.util.*;
class Point{
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public class Main {
static int[] disX = {0, 1, 0, -1};
static int[] disY = {1, 0, -1, 0};
static int m, n;
static int[][] array;
static int[][] dis;
static Queue<Point> qu = new LinkedList<>();
static int answer = Integer.MIN_VALUE;
public void BFS(){
while(!qu.isEmpty()){
Point point = qu.poll();
int x = point.x;
int y = point.y;
for (int i = 0; i < 4; i++) {
int tmpX = x + disX[i];
int tmpY = y + disY[i];
if(tmpX >= 0 && tmpX < n && tmpY >= 0 && tmpY < m && array[tmpX][tmpY] == 0){
array[tmpX][tmpY] = 1;
dis[tmpX][tmpY] = dis[x][y] + 1;
qu.offer(new Point(tmpX, tmpY));
}
}
}
}
public static void main(String[] args) {
Main main = new Main();
Scanner in = new Scanner(System.in);
m = in.nextInt();
n = in.nextInt();
array = new int[n][m];
dis = new int[n][m];
boolean isTomato = true;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int tmp = in.nextInt();
if(tmp == 1){
qu.offer(new Point(i, j));
}
array[i][j] = tmp;
}
}
main.BFS();
for(int i=0; i<n; i++){
for(int j=0; j<m; j++) {
if(array[i][j] == 0){
isTomato = false;
}
}
}
if(isTomato){
for(int i=0; i<n; i++){
for(int j=0; j<m; j++) {
answer = Math.max(answer, dis[i][j]);
}
}
System.out.println(answer);
}else{
System.out.println(-1);
}
}
}
'κ°λ° > μκ³ λ¦¬μ¦ λ¬Έμ νμ΄ JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA/μ½λ©ν μ€νΈ] νΌμ λ°°λ¬ κ±°λ¦¬(μΌμ± SWμλνκ° κΈ°μΆλ¬Έμ : DFSνμ©) (0) | 2022.03.22 |
---|---|
[JAVA/μ½λ©ν μ€νΈ] μ¬λλΌ μμΌλλ (0) | 2022.03.22 |
[JAVA/μ½λ©ν μ€νΈ] λ―Έλ‘μ μ΅λ¨κ±°λ¦¬ ν΅λ‘(BFS) (0) | 2022.03.18 |
[JAVA/μ½λ©ν μ€νΈ] λ―Έλ‘νμ(DFS) (0) | 2022.03.18 |
[JAVA/μ½λ©ν μ€νΈ] μμ₯ (0) | 2022.03.04 |