백준공부/java
[백준] 14940번 쉬운 최단 거리 (silver 1
gomduri43
2023. 6. 17. 22:19
import java.util.*;
import java.io.*;
class point{
int x;
int y;
public point(int x, int y){
this.x=x;
this.y=y;
}
}
public class Main{
static int[] possibleX={0,0,1,-1};
static int[] possibleY={1,-1,0,0};
public static void main (String[] args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb=new StringBuilder();
Queue<point> que= new ArrayDeque<>();
StringTokenizer st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken());
int m=Integer.parseInt(st.nextToken());
boolean[][] visit=new boolean[n+1][m+1];
int[][] map=new int[n+1][m+1];
for(int i=1; i<=n; i++){
st=new StringTokenizer(br.readLine());
for(int j=1; j<=m; j++){
map[i][j]=Integer.parseInt(st.nextToken());
if(map[i][j]==2){
que.offer(new point(j,i));
}
}
}
map[que.peek().y][que.peek().x]=0;
while(!que.isEmpty()){
point a=que.poll();
for(int i=0; i<4; i++){
int x=a.x+possibleX[i];
int y=a.y+possibleY[i];
if(x<0 || y<0 || x>m || y>n || visit[y][x]==true || map[y][x]==0 ){
continue;
}
map[y][x]=map[a.y][a.x]+1;
visit[y][x]=true;
que.offer(new point(x,y));
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(map[i][j]==1 && visit[i][j]==false ){
sb.append(-1+" ");
}
else {
sb.append(map[i][j] + " ");
}
}
sb.append("\n");
}
System.out.println(sb);
}
}