๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[BFS] 14. ๊ทธ๋ž˜ํ”„ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 10.

<<ํ’€์ด>>

 

์ด ๋ฌธ์ œ๋Š” 1๋ฒˆ ์ •์ ์—์„œ ๊ฐ ์ •์ ๊นŒ์ง€์˜ ์ตœ์†Œ ๊ฐ„์„  ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

Level๋กœ ํ’€ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ ์™ธ์— dis๋ผ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๋Š” 1์—์„œ ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ’๊นŒ์ง€ ์˜ค๊ธฐ ์œ„ํ•œ ๊ฐ„์„  ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•ด๋‘๊ณ  ์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์•„์ง ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š์€ ๊ฐ’๋“ค์„ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋˜ ์ด์ „ ๊ฐ’๋“ค ๊นŒ์ง€ ์˜ค๊ธฐ ๊นŒ์ง€์˜ ๊ฐ„์„ ์˜ ์ˆ˜์— + 1์„ ํ•ด์ค€๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ dis์˜ ๋ฐ์ดํ„ฐ๋Š” ์ธ๋ฑ์Šค ๊ฐ’์„ 1์—์„œ 2, 3, 4, 5 ๋กœ ํŠน์ • ์œ„์น˜๋กœ ๊ฐ„๋‹ค๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๊ณ  ๊ทธ ๋•Œ ๊ฐ„์„  ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

*์ธ๋ฑ์Šค ๊ฐ’์ด ์‹ค์ œ ๊ฐ’ 1, 2, 3 ๋“ฑ์œผ๋กœ ํ‘œํ˜„ํ•ด์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ดˆ๊ธฐ ๋ฐฐ์—ด ์„ ์–ธ ๋ถ€ํ„ฐ [n] ์ด ์•„๋‹Œ [n + 1]๋กœ ์ง€์ •ํ–ˆ๋‹ค.

 

*๋งŒ์•ฝ 1 -> 2๋กœ ๊ฐ€๋Š” ๊ฒƒ๋„ ์žˆ์ง€๋งŒ 1 -> 3 -> 2๋กœ ๊ฐ€๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ตœ์†Œ ๊ฐ„์„ ์ธ ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•˜์ง€? ๋ผ๋Š” ์ƒ๊ฐ์„ ์ดˆ๊ธฐ์— ํ–ˆ๋Š”๋ฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ch[] ๋ผ๋Š” ์ฒดํฌํ•˜๋Š” ๋ฐฐ์—ด๋กœ ํ†ตํ•ด์„œ ์ด๋ฏธ ๊ฐ„ ๊ณณ์€ 1๋กœ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ „์— 1 -> 2๋กœ ๊ฐ„ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด 1 -> 3 -> 2๋กœ ๊ฐ€๋Š” ๊ฒƒ์€ ๋บ„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

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

class Main {
    static int n, m;
    static ArrayList<ArrayList<Integer>> graph;
    static int[] ch, dis;
    public void BFS(int v) {
        Queue<Integer> queue = new LinkedList<>();
        ch[v] = 1;
        dis[v] = 0;
        queue.offer(v);
        while (!queue.isEmpty()) {
            int cv = queue.poll();
            for(int nv : graph.get(cv)) {
                if (ch[nv] == 0) {
                    ch[nv] = 1;
                    queue.offer(nv);
                    dis[nv] = dis[cv] + 1;
                }
            }
        }
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        m = in.nextInt();
        graph = new ArrayList<ArrayList<Integer>>();
        for (int i = 0; i <= n; i++) {
            graph.add(new ArrayList<Integer>());
        }
        ch = new int[n + 1];
        dis = new int[n + 1];
        for (int i = 0; i < m; i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            graph.get(a).add(b);
        }
        T.BFS(1);
        for (int i = 2; i <= n; i++) {
            System.out.println(i + " : " + dis[i]);

        }
    }
}

 

์—ฌ๊ธฐ๊นŒ์ง€ DFS BFS ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ ํ˜•์‹์„ ์ ‘ํ•ด๋ณด์•˜๋‹ค. ์ดํ•ด๋Š” ํ–ˆ์ง€๋งŒ ์•„์ง๊นŒ์ง€ ์™„๋ฒฝํžˆ ๋‚ด ๊ฒƒ์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค. ์ด์ œ ๋ถ€ํ„ฐ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ธฐ์ถœ์„ ํ’€์–ด ๋ณผํ…๋ฐ ์™„์ „ํžˆ ๋‚ด ๊ฒƒ์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๋ถ€ํ•ด๋ณด์ž!!

๋Œ“๊ธ€