[백준] 7569번 토마토 (java, 3차원 bfs)
728x90
반응형
앞뒤를 나타내는 좌표 이동을 추가해서 추가로 검사해준다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Pos{
int h,y,x;
public Pos(int h, int y, int x) {
super();
this.h = h;
this.y = y;
this.x = x;
}
}
public class Main {
static int m,n,h;
static int[][][] map;
static Queue<Pos> q=new LinkedList<Pos>();
static int[] xpos= {1,-1,0,0,0,0};
static int[] ypos= {0,0,1,-1,0,0};
static int[] zpos= {0,0,0,0,1,-1};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
m=sc.nextInt();
n=sc.nextInt();
h=sc.nextInt();
map=new int[h][n][m];
for (int k = 0; k < h; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
map[k][i][j]=sc.nextInt();
if(map[k][i][j]==1) {
q.add(new Pos(k,i,j));
}
}
}
}
int time=0;
while(q.size()!=0) {
int len=q.size();
for (int i = 0; i < len; i++) {
Pos cur=q.poll();
int z=cur.h;
int y=cur.y;
int x=cur.x;
for (int k = 0; k < 6; k++) {
int xx=x+xpos[k];
int yy=y+ypos[k];
int zz=z+zpos[k];
if(xx<0 || yy<0 || zz<0 || xx>=m || yy>=n || zz>=h)continue;
if(map[zz][yy][xx]==0) {
map[zz][yy][xx]=1;
q.add(new Pos(zz,yy,xx));
}
}
}
if(q.size()!=0) {
time++;
}
}
for (int k = 0; k < h; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(map[k][i][j]==0) {
System.out.println(-1);
System.exit(0);
}
}
}
}
System.out.println(time);
}
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 20055번 컨베이어 벨트 위의 로봇 (java, 구현) (0) | 2021.04.15 |
---|---|
[백준] 20056번 마법사 상어와 파이어볼 (java, 구현, bfs) (0) | 2021.04.15 |
[백준] 17144번 미세먼지 안녕! (java, 구현) (0) | 2021.04.14 |
[백준] 7576번 토마토 (bfs) (0) | 2021.04.14 |
[백준] 17413번 단어 뒤집기 2 (JAVA, 구현) (0) | 2021.04.11 |
TAGS.