Kim_dev 2022. 7. 1. 17:36

[BOJ 1260] DFS와 BFS

 

1. 문제 : Link

dfs 와 bfs λ¬»λŠ” 문제

 

2. 풀이

이제 슬 감이 μž‘νžŒλ‹€ (2023.04.07)

link[i][j] = link [j][i] = 1 (μ—°κ²°λœ 선이 μžˆλ‹€κ³  ν‘œμ‹œν•˜λŠ”κ²Œ μ€‘μš”)

* Eλ₯Ό μˆœνšŒν•˜λŠ” 것이 μ•„λ‹˜ !
* μ—°κ²°λœ κ°„μ„  쀑 λ‹€μŒ μˆ«μžκ°€ μž‘μ€ 것 λΆ€ν„° νƒμƒ‰ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έ

 

3. μ½”λ“œ

package baekjoon;

import java.io.IOException;
import java.util.*;
public class Main {
    //ν•¨μˆ˜μ—μ„œ μ‚¬μš©ν•  λ³€μˆ˜λ“€
    static int[][] link; //κ°„μ„  μ—°κ²°μƒνƒœ
    static boolean[] visited; //확인 μ—¬λΆ€
    static int V; //μ •μ κ°œμˆ˜
    static int E; //κ°„μ„ κ°œμˆ˜
    static int start; //μ‹œμž‘μ •μ 

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        V = sc.nextInt();
        E = sc.nextInt();
        start = sc.nextInt();

        link = new int[1001][1001]; //μ’Œν‘œλ₯Ό κ·ΈλŒ€λ‘œ 받아듀이기 μœ„ν•΄ +1ν•΄μ„œ μ„ μ–Έ
        visited = new boolean[1001]; //μ΄ˆκΈ°κ°’ False

        //κ°„μ„  μ—°κ²°μƒνƒœ μ €μž₯
        for(int i = 0; i < E; i++) {
            int x = sc.nextInt();
            int y = sc.nextInt();

            link[x][y] = link[y][x] = 1;
        }

        dfs(start); //dfs호좜

        visited = new boolean[1001]; //ν™•μΈμƒνƒœ μ΄ˆκΈ°ν™”
        System.out.println(); //μ€„λ°”κΏˆ

        bfs(); //bfs호좜
    }

    //μ‹œμž‘μ μ„ λ³€μˆ˜λ‘œ λ°›μ•„ 확인, 좜λ ₯ ν›„ λ‹€μŒ 연결점을 μ°Ύμ•„ μ‹œμž‘μ μ„ λ³€κ²½ν•˜μ—¬ 재호좜
    public static void dfs(int cur) {
        visited[cur] = true;
        System.out.print(cur + " ");

        for(int j = 1; j <= V; j++) {
            if(link[cur][j] == 1 && !visited[j]) {
                dfs(j);
            }
        }
    }

    public static void bfs() {
        Queue<Integer> queue = new LinkedList<Integer>();
        queue.offer(start);
        visited[start] = true;
        System.out.print(start + " ");

        while(!queue.isEmpty()) {
            int cur = queue.poll();

            for(int j = 1; j <= V; j++) {
                if(link[cur][j] == 1 && !visited[j]) {
                    queue.offer(j);
                    visited[j] = true;
                    System.out.print(j + " ");
                }
            }
        }
    }
}