import java.util.*; class Pair{ int x; int y; Pair(int x, int y){ this.x=x; this.y=y; } } public class Main{ static int map[][]; static int check[][]; static int[]dx ={-1,1,0,0}; static int[]dy={0,0,-1,1}; static int n,m;
public static void bfs( int n, int m, int map[][], int d){ Queue<Pair> q= new LinkedList<Pair>(); for(int i=0; i<n; i++){ for( int j=0; j<m; j++){ if(map[i][j]==d){ q.add(new Pair(i,j)); } } } if(q.isEmpty()) return; while(!q.isEmpty()){ Pair p=q.remove(); int x=p.x; int y=p.y; for(int i=0; i<4; i++){ int nx = x+dx[i]; int ny = y+dy[i]; if(0<=nx & 0<=ny && nx<n && ny<m){ if(map[nx][ny]==0){ map[nx][ny]=d+1; } } } } } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc= new Scanner(System.in); m=sc.nextInt(); n=sc.nextInt(); sc.nextLine(); map=new int[n][m]; check=new int[n][m]; for(int i=0; i<n; i++){ for( int j=0; j<m; j++){ map[i][j]=sc.nextInt(); } }
for(int d=1; d<=n+m+2; d++){ bfs(n, m, map, d); } int result=0; for(int i=0; i<n; i++){ for( int j=0; j<m; j++){ if(map[i][j]==0){ result=n*m+10; }else{ result=Math.max(result, map[i][j]); } } }
firenation 6년 전
import java.util.*;
class Pair{
int x;
int y;
Pair(int x, int y){
this.x=x;
this.y=y;
}
}
public class Main{
static int map[][];
static int check[][];
static int[]dx ={-1,1,0,0};
static int[]dy={0,0,-1,1};
static int n,m;
public static void bfs( int n, int m, int map[][], int d){
Queue<Pair> q= new LinkedList<Pair>();
for(int i=0; i<n; i++){
for( int j=0; j<m; j++){
if(map[i][j]==d){
q.add(new Pair(i,j));
}
}
}
if(q.isEmpty()) return;
while(!q.isEmpty()){
Pair p=q.remove();
int x=p.x;
int y=p.y;
for(int i=0; i<4; i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(0<=nx & 0<=ny && nx<n && ny<m){
if(map[nx][ny]==0){
map[nx][ny]=d+1;
}
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc= new Scanner(System.in);
m=sc.nextInt();
n=sc.nextInt();
sc.nextLine();
map=new int[n][m];
check=new int[n][m];
for(int i=0; i<n; i++){
for( int j=0; j<m; j++){
map[i][j]=sc.nextInt();
}
}
for(int d=1; d<=n+m+2; d++){
bfs(n, m, map, d);
}
int result=0;
for(int i=0; i<n; i++){
for( int j=0; j<m; j++){
if(map[i][j]==0){
result=n*m+10;
}else{
result=Math.max(result, map[i][j]);
}
}
}
if(result==n*m+10) System.out.println(-1);
else System.out.println(result-1);
}
}