#include <stdio.h>
int x = 0,y = 0,z = 0;
int box[102][102][102]={};
int qu = 0,de = 0,queue[1000002][3]={};
int max = 0, maxday, day = -1;
int view(){
for(int i = 0 ; i < z ; i++){
for(int j = 0 ; j < y ; j++){
for(int k = 0 ; k < x ; k++){
if(box[i][j][k]==0)
return -1;
}
}
}
return day;
}
void push(int a,int b,int c){
if( a < 0 || b < 0 || c < 0 || a >= z || b >=y || c >= x ) return ;
if(box[a][b][c] != 0) return ;
queue[qu][0]=a;
queue[qu][1]=b;
queue[qu++][2]=c;
box[a][b][c]=1;
max++;
}
int main() {
scanf("%d %d %d",&x,&y,&z);
for(int k = 0 ; k < z ; k++){
for(int i = 0 ; i < y ; i++){
for(int j = 0 ; j < x ; j++){
scanf("%d",&box[k][i][j]);
if(box[k][i][j] == 1){
push(k,i,j); max++;
queue[qu][0]=k;
queue[qu][1]=i;
queue[qu++][2]=j;
box[k][i][j]=1;
}
}
}
}
while(1){
if(de >= qu)
break;
maxday = max;
for( max = 0 ; maxday > 0; maxday-- ){
int a = queue[de][0];
int b = queue[de][1];
int c = queue[de++][2];
push(a+1,b,c);
push(a-1,b,c);
push(a,b+1,c);
push(a,b-1,c);
push(a,b,c+1);
push(a,b,c-1);
}
day++;
}
/*
for(int i = 0 ; i < z ; i++){
for(int j = 0 ; j < y ; j++){
for(int k = 0 ; k < x ; k++){
printf("%d ",box[i][j][k]);
}
printf("\n");
}
}
*/
int n = view();
printf("%d",n);
return 0;
}
top of page

기능을 테스트하려면 라이브 사이트로 이동하세요.
수정: 2023년 12월 10일
BFS 토마토 (초등)
BFS 토마토 (초등)
댓글 0개
좋아요
댓글(0)
bottom of page