๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

๋ฐฑ์ค€ 1260๋ฒˆ) DFS์™€ BFS java ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 1260๋ฒˆ) DFS์™€ BFS java

sehaan 2023. 3. 13. 00:48

๋ถ„์„


์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๋ฉด bfs์™€ dfs์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ์•„์•ผํ•œ๋‹ค.

 

dfs, bfs๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ๋ฐ, ๊ตฌํ˜„ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋œ๋‹ค.

(*๊ทธ๋ž˜ํ”„ : ๋…ธ๋“œ์™€ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…)

 

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(bfs)

- ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„์ „ํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค.

  ์Šคํƒ , ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์ข€ ๋” ๊ฐ„๋žตํ•œ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜จ๋‹ค.

  ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผํ•˜๊ฑฐ๋‚˜ , ๊ทธ๋ž˜ํ”„๊ฐ€ ํฐ ๊ฒฝ์šฐ ์‚ฌ์šฉ

 

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(bfs)

- ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. 

  ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ  ๋ฉ€๋ฆฌ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋‚˜์ค‘์— ๋ฐฉ๋ฌธํ•œ๋‹ค.

  ํ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ

 

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static StringBuilder sb = new StringBuilder();
    static int node, line, start;
    static int[][] arr;
    static boolean[] visit;

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

        StringTokenizer st = new StringTokenizer(br.readLine());
        node = Integer.parseInt(st.nextToken());
        line = Integer.parseInt(st.nextToken());
        start = Integer.parseInt(st.nextToken());

        visit = new boolean[node + 1];
        arr = new int[node + 1][node + 1];

        for (int i = 0; i < line; i++) {
            StringTokenizer str  = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(str.nextToken());
            int b = Integer.parseInt(str.nextToken());
            arr[a][b] = arr[b][a] = 1;
        }


        dfs(start);
        visit = new boolean[node + 1];
        sb.append("\n");
        bfs(start);
        System.out.println(sb);
    }

    static void dfs(int start) {
        sb.append(start + " ");
        visit[start] = true;
        for (int i = 1; i <= node; i++) {
            if (arr[start][i] == 1 && !visit[i]) {
                dfs(i);
            }
        }
    }

    static void bfs(int start) {
        Queue<Integer> q = new LinkedList<>();

        q.add(start);
        visit[start] = true;

        while(!q.isEmpty()){
            int value = q.poll();
            sb.append(value+" ");

            for(int i=1;i<=node;i++){
                if(arr[value][i] == 1 && !visit[i]){
                    visit[i] = true;
                    q.add(i);
                }
            }

        }
    }


}