개발 공부~

[BFS] 미로의 최단거리 통로 .java 본문

코딩테스트/기타

[BFS] 미로의 최단거리 통로 .java

머밍 2024. 11. 16. 15:30

설명

7*7 격자판 미로를 탈출하는 최단경로의 길이를 출력하는 프로그램을 작성하세요.

경로의 길이는 출발점에서 도착점까지 가는데 이동한 횟수를 의미한다.

출발점은 격자의 (1, 1) 좌표이고, 탈출 도착점은 (7, 7)좌표이다. 격자판의 1은 벽이고, 0은 도로이다.

격자판의 움직임은 상하좌우로만 움직인다. 미로가 다음과 같다면

위와 같은 경로가 최단 경로의 길이는 12이다.

입력

첫 번째 줄부터 7*7 격자의 정보가 주어집니다.

출력

첫 번째 줄에 최단으로 움직인 칸의 수를 출력한다. 도착할 수 없으면 -1를 출력한다.

예시 입력 1 

0 0 0 0 0 0 0
0 1 1 1 1 1 0
0 0 0 1 0 0 0
1 1 0 1 0 1 1
1 1 0 1 0 0 0
1 0 0 0 1 0 0
1 0 1 0 0 0 0

예시 출력 1

12

 

 

내 풀이

큐에 좌표 -> (x,y)를 넣기

현재 좌표에서 갈 수 있는 값(0)을 가진 좌표를 큐에 추가 -> 방문처리

 

최단거리 갱신 -> 각 좌표까지의 최소거리만 업데이트 => dis 이차원배열 생성

=> dis[nx][ny] = dis[x][y]+1

 


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;



class Point{

    public Point(int x, int y) {

        this.x = x;
        this.y = y;
    }

    public int x,y;

}
public class Main {
    static int[][] board, dis;
    static int n,m;
    static int[] dx = { -1,0,1,0};
    static int[] dy  = {0,1,0,-1};
    static int answer = 0;

    public static void bfs(int x, int y) {
        Queue<Point> q = new LinkedList<>();
        q.offer(new Point(x,y));
        board[x][y] =1;//방문처리
        while(!q.isEmpty()) {
            Point cur = q.poll();
            for(int i =0; i<4; i++) {
                int nx = cur.x + dx[i];
                int ny = cur.y + dy[i];
                if(nx >=1 && nx<=7 && ny>=1 && ny<=7 && board[nx][ny] ==0) {
                    board[nx][ny] = 1;
                    q.offer(new Point(nx,ny));
                    dis[nx][ny] = dis[cur.x][cur.y] + 1;//거리 갱신
                }
            }
        }

    }
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);


        board = new int[8][8];
        dis = new int[8][8];

        for(int i = 1; i <=7;i++) {
            for(int j =1; j<=7;j++) board[i][j] = sc.nextInt();
        }

        bfs(1,1);//시작 좌표 (1,1)

        if(dis[7][7]==0) System.out.println(-1);
        else System.out.print(dis[7][7]);

    }

}

'코딩테스트 > 기타' 카테고리의 다른 글

[DFS, BFS] 섬나라 아일랜드 .java  (1) 2024.11.16
[BFS] 토마토 .java  (0) 2024.11.16
[DFS] 미로 탐색  (0) 2024.11.16
[DFS] 조합 구하기 .java  (0) 2024.11.16
[DFS, 메모이제이션] 수열 추측하기  (3) 2024.11.16