๐ŸŒท๐ŸŒผ๋ชจ์—ฌ๋ด์š” ๊ฐœ๋ฐœ์˜์ˆฒ๐ŸŒท๐ŸŒผ

[JAVA/์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ๋ฏธ๋กœ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ†ต๋กœ(BFS) ๋ณธ๋ฌธ

๊ฐœ๋ฐœ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด JAVA

[JAVA/์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ๋ฏธ๋กœ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ†ต๋กœ(BFS)

์š”์ผ์ด 2022. 3. 18. 20:27
๋ฐ˜์‘ํ˜•

์„ค๋ช…

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

 

 

import java.util.*;

class Point{

    int x;
    int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
   }

}

public class Main {

    static int[] disX = {0, 1, 0, -1};
    static int[] disY = {1, 0, -1, 0};
    static int[][] array;
    static int[][] dis;
    static int answer = Integer.MAX_VALUE;

    public void BFS(int x, int y){

        Queue<Point> qu = new LinkedList<>();

        qu.offer(new Point(x, y));

        while(!qu.isEmpty()){

                Point point = qu.poll();

                x = point.x;
                y = point.y;

                array[x][y] = 1;

                for (int i = 0; i < 4; i++) {

                    int tmpX = x + disX[i];
                    int tmpY = y + disY[i];

                    if(tmpX >= 0 && tmpX <=6 && tmpY >= 0 && tmpY <= 6 && array[tmpX][tmpY] == 0){
                            dis[tmpX][tmpY] = dis[x][y] + 1;
                            qu.offer(new Point(tmpX, tmpY));
                    }

                }

        }
    }

    public static void main(String[] args) {

        Main main = new Main();

        Scanner in = new Scanner(System.in);

        array = new int[7][7];
        dis = new int[7][7];

        for(int i=0; i<7; i++){
            for(int j=0; j<7; j++){
                array[i][j] = in.nextInt();
            }
        }

        main.BFS(0, 0);

        if(dis[6][6] == 0){
            answer = -1;
        }else{
            answer = dis[6][6];
        }

        System.out.println(answer);

    }
}
Comments