๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽฏPS - Baekjoon, etc/BFS

๐Ÿฅˆ[๋ฐฑ์ค€, 1260] DFS์™€ BFS (Java)

by hyeon-z 2023. 4. 18.

 

๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/1260

 

1260๋ฒˆ: DFS์™€ BFS

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 โ‰ค M โ‰ค 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ

www.acmicpc.net

 

๋‚œ์ด๋„

 

์‹œ๊ฐ„์ œํ•œ

2์ดˆ

 

๋ฌธ์ œ

๊ทธ๋ž˜ํ”„๋ฅผ DFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ์™€ BFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ , ๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ข…๋ฃŒํ•œ๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€์ด๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 โ‰ค M โ‰ค 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— DFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ๋‹ค์Œ ์ค„์—๋Š” BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. V๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ๋œ ์ ์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ 1

์ž…๋ ฅ 

4 5 1
1 2
1 3
1 4
2 4
3 4

์ถœ๋ ฅ

1 2 4 3
1 2 3 4

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ 2

์ž…๋ ฅ

5 5 3
5 4
5 2
1 2
3 4
3 1

์ถœ๋ ฅ

3 1 2 5 4
3 1 4 2 5

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ 3

์ž…๋ ฅ

1000 1 1000
999 1000

 

์ถœ๋ ฅ

1000 999
1000 999

๋ฌธ์ œ ํ’€์ด ๊ณผ์ •

๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์ž์„ธํ•œ ์„ค๋ช…์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] Graph

๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ(Node)์™€ ๊ฐ„์„ (Edge)์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์ด๋•Œ ๋…ธ๋“œ๋ฅผ ์ •์ (Vertex)๋ผ๊ณ ๋„ ๋งํ•œ๋‹ค. ์ข€ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๋…ธ๋“œ๋Š” ๋„์‹œ, ๊ฐ„์„ ์€ ๋„๋กœ์ด๋‹ค. A๋ผ๋Š” ๋„์‹œ(๋…ธ๋“œ)์—์„œ B๋ผ๋Š” ๋„์‹œ(๋…ธ๋“œ)๋กœ ์ด๋™

hyeon-z.tistory.com

 

1. ์ธ์ ‘ ํ–‰๋ ฌ์„ ํ†ตํ•œ ๊ตฌํ˜„

์ž…๋ ฅ ๊ฐ’ ์ €์žฅํ•˜๊ธฐ

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());

graph = new int[N + 1][N + 1];

for (int i = 0; i < M; i++) {
    st = new StringTokenizer(br.readLine());

    int num1 = Integer.parseInt(st.nextToken());
    int num2 = Integer.parseInt(st.nextToken());

    graph[num1][num2] = 1;
    graph[num2][num1] = 1;
}

 

์ธ์ ‘ ํ–‰๋ ฌ์—์„œ ์„œ๋กœ ์ธ์ ‘ํ•œ ๊ฒฝ์šฐ๋Š” 1๋กœ ํ‘œ๊ธฐํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” 0์œผ๋กœ ํ‘œ๊ธฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ graph์— ์ €์žฅํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ 1์˜ ๊ฒฝ์šฐ ์ด์ฒ˜๋Ÿผ ์ธ์ ‘ ํ–‰๋ ฌ์ด ํ‘œ๊ธฐ๋œ๋‹ค.

 

 

dfs ํ•จ์ˆ˜ ๊ตฌํ˜„

 

public class BOJ_1260_1 {
    static int N;
    static int[][] graph;
    static boolean[] visited;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());

        graph = new int[N + 1][N + 1];

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());

            int num1 = Integer.parseInt(st.nextToken());
            int num2 = Integer.parseInt(st.nextToken());

            graph[num1][num2] = 1;
            graph[num2][num1] = 1;
        }
    }
}

dfs๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. 1๋ถ€ํ„ฐ ์ •์ ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉฐ graph์˜ ๊ฐ’์ด 1์ด๊ณ (์—ฐ๊ฒฐ๋œ ์ •์ ์ด๊ณ ) ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ํ•ด๋‹น ๋…ธ๋“œ์— ๋Œ€ํ•œ dfsํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

bfsํ•จ์ˆ˜ ๊ตฌํ˜„

 

static void bfs(int n) {
    Queue<Integer> queue = new LinkedList<>();

    queue.offer(n);
    visited[n] = true;

    while (!queue.isEmpty()) {
        int node = queue.poll();
        sb.append(node).append(" ");

        for (int i = 1; i <= N; i++) {
            if (graph[node][i] == 1 && !visited[i]) {
                queue.offer(i);
                visited[i] = true;
            }
        }
    }
}

bfs๋Š” ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ฒ˜์Œ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ๊ทธ ํ›„ ํ์— ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๋™์•ˆ ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ ์ค‘์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ํ•ด๋‹น ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋ฉด ์ข…๋ฃŒ๋œ๋‹ค.

 

์ตœ์ข… ์ฝ”๋“œ

 

public class BOJ_1260_1 {
    static int N;
    static int[][] graph;
    static boolean[] visited;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());

        graph = new int[N + 1][N + 1];

        // ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());

            int num1 = Integer.parseInt(st.nextToken());
            int num2 = Integer.parseInt(st.nextToken());

            graph[num1][num2] = 1;
            graph[num2][num1] = 1;
        }

        visited = new boolean[N + 1];
        dfs(V);
        sb.append("\n");

        visited = new boolean[N + 1];
        bfs(V);
        System.out.println(sb);
    }

    static void dfs(int n) {
        visited[n] = true;
        sb.append(n).append(" ");

        for (int i = 1; i <= N; i++) {
            if (graph[n][i] == 1 && !visited[i]) {
                dfs(i);
            }
        }
    }

    static void bfs(int n) {
        Queue<Integer> queue = new LinkedList<>();

        queue.offer(n);
        visited[n] = true;

        while (!queue.isEmpty()) {
            int node = queue.poll();
            sb.append(node).append(" ");

            for (int i = 1; i <= N; i++) {
                if (graph[node][i] == 1 && !visited[i]) {
                    queue.offer(i);
                    visited[i] = true;
                }
            }
        }
    }
}

dfs์™€ bfs๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ StringBuilder()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅํ–ˆ๋‹ค.

 

 

 

2. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•œ ๊ตฌํ˜„

์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„์˜ ๊ตฌํ˜„์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•˜๊ฒ ๋‹ค.

 

์ž…๋ ฅ ๊ฐ’ ์ €์žฅํ•˜๊ธฐ

 

public class BOJ_1260_2 {
    static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
    static boolean[] visited;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
		...

        for (int i = 0; i <= N; i++) {
            graph.add(new ArrayList<>());
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());

            int num1 = Integer.parseInt(st.nextToken());
            int num2 = Integer.parseInt(st.nextToken());

            graph.get(num1).add(num2);
            graph.get(num2).add(num1);
        }
    }
}

๊ฐ ์ •์ ๋งˆ๋‹ค ์—ฐ๊ฒฐ๋œ ์ •์ ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ArrayList<ArrayList<Integer>>์˜ ํƒ€์ž…์œผ๋กœ ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ตฌ์„ฑ๋œ๋‹ค.

๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉฐ ์—ฐ๊ฒฐ๋œ ์ •์ ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์ฒ˜์Œ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ์— graph.get()์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ์ •์ ์˜ ArrayList์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ 1์˜ ๊ฒฝ์šฐ ์ด์ฒ˜๋Ÿผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ‘œ๊ธฐ๋œ๋‹ค.

 

โ—์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ !!

๋ฌธ์ œ์— "๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์€ ๋จผ์ € ๋ฐฉ๋ฌธํ•œ๋‹ค."๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ๋‹ค.

์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ ์ด๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋˜์—ˆ์ง€๋งŒ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์ €์žฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰์ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

์˜ˆ์ œ 1์˜ ๊ฒฝ์šฐ ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅ ๊ฐ’์ด ๋“ค์–ด์™€ ๋”ฐ๋กœ ์ •๋ ฌ์ด ํ•„์š” ์—†์ง€๋งŒ, ์˜ˆ์ œ 2๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ •์ ์˜ ํฌ๊ธฐ๊ฐ€ ์ •๋ ฌ์ด ๋˜์ง€ ์•Š์€ ์ฑ„๋กœ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

for (int i = 1; i <= N; i++) {
    Collections.sort(graph.get(i));
}

์ด์™€ ๊ฐ™์ด ๊ฐ ์ •์ ์— ์ธ์ ‘ํ•˜๋Š” ์ •์  ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

 

dfs ํ•จ์ˆ˜ ๊ตฌํ˜„

 

static void dfs(int n) {
    visited[n] = true;
    sb.append(n).append(" ");

    for (int i = 0; i < graph.get(n).size(); i++) {
        int num = graph.get(n).get(i);

        if (!visited[num]) {
            dfs(num);
        }
    }
}

๊ฐ ์ •์ ์— ์ธ์ ‘ํ•˜๋Š” ์ •์  ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉฐ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ dfsํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

 

bfsํ•จ์ˆ˜ ๊ตฌํ˜„

 

static void bfs(int n) {
    Queue<Integer> queue = new LinkedList<>();

    queue.offer(n);
    visited[n] = true;

    while (!queue.isEmpty()) {
        int node = queue.poll();
        sb.append(node).append(" ");

        for (int i = 0; i < graph.get(node).size(); i++) {
            int linkNode = graph.get(node).get(i);

            if (!visited[linkNode]) {
                queue.offer(linkNode);
                visited[linkNode] = true;
            }
        }
    }
}

์„ค๋ช…์€ ์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ๊ฐ™๋‹ค.

 

์ตœ์ข… ์ฝ”๋“œ

 

public class BOJ_1260_2 {
    static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
    static boolean[] visited;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());

        // ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
        for (int i = 0; i <= N; i++) {
            graph.add(new ArrayList<>());
        }

        // ๊ทธ๋ž˜ํ”„์— ์ž…๋ ฅ ๊ฐ’ ์ €์žฅ
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());

            int num1 = Integer.parseInt(st.nextToken());
            int num2 = Integer.parseInt(st.nextToken());

            graph.get(num1).add(num2);
            graph.get(num2).add(num1);
        }

        // ์ •์  ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
        for (int i = 1; i <= N; i++) {
            Collections.sort(graph.get(i));
        }

        visited = new boolean[N + 1];
        dfs(V);
        sb.append("\n");

        visited = new boolean[N + 1];
        bfs(V);
        System.out.println(sb);
    }

    static void dfs(int n) {
        visited[n] = true;
        sb.append(n).append(" ");

        for (int i = 0; i < graph.get(n).size(); i++) {
            int num = graph.get(n).get(i);

            if (!visited[num]) {
                dfs(num);
            }
        }
    }

    static void bfs(int n) {
        Queue<Integer> queue = new LinkedList<>();

        queue.offer(n);
        visited[n] = true;

        while (!queue.isEmpty()) {
            int node = queue.poll();
            sb.append(node).append(" ");

            for (int i = 0; i < graph.get(node).size(); i++) {
                int linkNode = graph.get(node).get(i);

                if (!visited[linkNode]) {
                    queue.offer(linkNode);
                    visited[linkNode] = true;
                }
            }
        }
    }
}

 

 

๋Œ“๊ธ€