https://www.acmicpc.net/problem/17086
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
static int arr[51][51];
static bool check[51][51];
static int n,m;
static int dx[]= {0,0,1,-1,1,1,-1,-1};
static int dy[]= {1,-1,0,0,1,-1,-1,1};
static void set(){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
check[i][j]=false;
}
}
}
static int bfs(int a,int b){
set();
queue<pair<pair<int,int>,int>> q;
q.push(make_pair(make_pair(a,b),0));
check[a][b]=true;
while(!q.empty()){
int v1=q.front().first.first;
int v2=q.front().first.second;
int v3=q.front().second;
q.pop();
for(int i=0;i<8;i++){
int x=v1+dx[i];
int y=v2+dy[i];
int z=v3+1;
if(x<0 || x>=n || y<0 || y>=m || check[x][y]==true) continue;
if(arr[x][y]==1) return z;
q.push(make_pair(make_pair(x,y),z));
check[x][y]=true;
}
}
return 0;
}
int main() {
cin >> n >> m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin >> arr[i][j];
}
}
int count=0;
int num=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j]!=1){
num=bfs(i,j);
count=num>count?num:count;
}
}
}
cout << count;
}