#include<stdio.h>
typedef struct answer
{
int x,y;
} answer;
answer que[1000000],d,datas[1000000];
int wx[4]= {-1,1,0,0};
int wy[4]= {0,0,-1,1};
int f=0,r=0,q=0,m,n,l=0;
int warehouse[1000][1000]= {};
void enq(int x,int y)
{
q++;
que[++r].x=x;
que[r].y=y;
}
void deq()
{
int i,a,b,j;
for(i=1; i<=q; i++)
{
d=que[++f];
warehouse[d.x][d.y]=1;
datas[l++]=d;
}
q=0;
for(i=0;i<l;i++)
{
for(j=0; j<4; j++)
{
a = datas[i].x+wx[j];
b = datas[i].y+wy[j];
if( !warehouse[a][b] && (a>=0 && a<n) && (b>=0 && b<m))
{
enq(a,b);
}
}
}
}
int main()
{
int i,j,day=0;
scanf("%d %d",&m,&n);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d",&warehouse[i][j]);
if(warehouse[i][j]==1)
{
enq(i,j);
}
}
}
while(f!=r)
{
deq();
day++;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(warehouse[i][j]==0)
{
printf("%d",-1);
return 0;
}
}
}
printf("%d",day-1);
}
bfs는 enq를 하면서 visit을 체크하기 때문에, enq 함수 내에 visit 체크부분을 추가해야해
void enq(int x,int y)
{
q++;
que[++r].x=x;
que[r].y=y;
warehouse[x][y]=1; //visit check!!!
}
segment error fixed