#include <iostream>
using namespace std;
void setcount(int box[1002][1002], int i, int j)
{
if(box[i][j]==0)
return;
if(box[i][j]==-1)
return;
int c=0;
if(box[i-1][j]<box[i][j]-1&&box[i-1][j]!=-1)
{
c++;
box[i][j]=box[i-1][j]+1;
}
if(box[i+1][j]<box[i][j]-1&&box[i+1][j]!=-1)
{
c++;
box[i][j]=box[i+1][j]+1;
}
if(box[i][j-1]<box[i][j]-1&&box[i][j-1]!=-1)
{
c++;
box[i][j]=box[i][j-1]+1;
}
if(box[i][j+1]<box[i][j]-1&&box[i][j+1]!=-1)
{
c++;
box[i][j]=box[i][j+1]+1;
}
if(c==0)
return;
setcount(box,i-1,j);
setcount(box,i+1,j);
setcount(box,i,j-1);
setcount(box,i,j+1);
}
int main()
{
int m, n;
int max=0;
cin>>m>>n;
int box[1002][1002]={1000000};
for(int i=0;i<1002;i++)
{
for(int j=0;j<1002;j++)
{
if(i==0||i>n||j==0||j>m)
box[i][j]=-1;
}
}
int s;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>s;
if(s==1)
box[i][j]=0;
if(s==0)
box[i][j]=1000000;
if(s==-1)
box[i][j]=-1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(box[i][j]==0)
{
setcount(box,i-1,j);
setcount(box,i+1,j);
setcount(box,i,j-1);
setcount(box,i,j+1);
}
}
}
int t;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(box[i][j]!=-1)
{
t=box[i][j];
max=(t>max)?t:max;
}
}
}
if(max==1000000)
cout<<-1;
else
cout<<max;
return 0;
}
int 1002*1002칸 메모리 문제는 아닌거같아
제출할때 그냥 int arr[1002][1002]={0}; 해서 내면 엑셉트는 되는데 틀렸다그러거든
이코드는 아예 segmetation fault로 채점도 안돌아감..
어디가 문제야 ㅠㅠ 제발.. 제발 플리즈
아 m,n 범위가 1~1000 사이 정수라 배열 사이즈 저렇게 잡았음..
Gdb같은걸로덤프를열어보나?
codesaf// 초기값 내용 뺐음 코드를 하도 지웠다 썼다 하다보니 남은거.. ㅠㅠ
box 전역으로 빼고 다시해볼게 잠시만
box 전역으로 빼도 세그멘테이션 폴트.. 근데 애초에 스택 사이즈가 100만 이하면 풀수 없는문제 아니야? ㅠㅠ
정정 100만*4바이트
일단 인풋을 받아야 뭘 하든말든 하는데 인풋 받으려면 최소한 1000*1000칸은 필요하잖여..