Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

개발자 일기장.

백준 1260. DFS, BFS 본문

취업/Algorithm.

백준 1260. DFS, BFS

Azderica 2020. 5. 30. 13:38

1260 DFS, BFS

문제해결 사진

image

문제 알고리즘

  • BFS

  • DFS

풀이방법

  1. graph(리스트 배열)을 만들어서 노드를 양방향으로 연결한다.

  2. DFS, BFS를 출력한다.

  • 핵심 코드
import java.io.*;
import java.util.*;

public class Main {
    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    private static int N, M, V;
    private static boolean[] visited;
    private static ArrayList<Integer>[] graph;

    public static void main(String[] args) throws IOException {
        init();
        solution();
    }

    // init & input code
    public static void init() throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine());

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

        visited = new boolean[N + 1];
        graph = new ArrayList[N + 1];
        for (int i = 1; i <= N; i++) {
            graph[i] = new ArrayList<Integer>();
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int from = Integer.parseInt(st.nextToken());
            int to = Integer.parseInt(st.nextToken());

            graph[from].add(to);
            graph[to].add(from);
        }
    }

    // solution code
    public static void solution() throws IOException {
        // sorting
        for (int i = 1; i <= N; i++) {
            Collections.sort(graph[i]);
        }

        // print dfs
        Arrays.fill(visited, false);
        dfs(V);
        System.out.println("");

        // print bfs
        Arrays.fill(visited, false);
        bfs(V);
        System.out.println("");
    }

    static void dfs(int from) throws IOException {
        if (visited[from])
            return;
        visited[from] = true;
        System.out.print(from + " ");
        for (int to : graph[from]) {
            if (!visited[to]) {
                dfs(to);
            }
        }
    }

    static void bfs(int start) throws IOException {
        Queue<Integer> queue = new LinkedList<Integer>();
        queue.add(start);
        visited[start] = true;

        while (!queue.isEmpty()) {
            int from = queue.poll();
            System.out.print(from + " ");
            for (int to : graph[from]) {
                if (!visited[to]) {
                    visited[to] = true;
                    queue.add(to);
                }
            }
        }
    }
}

문제 후 느낀점

  • 오랜만에 보는 문제. 자바로 다시 풀어봄.
  • C++랑 시간 차이...

'취업 > Algorithm.' 카테고리의 다른 글

백준 1987. 알파벳  (0) 2020.05.30
백준 1793. 타일링  (0) 2020.05.30
[2020 KAKAO BLIND RECRUITMENT] 외벽 점검  (0) 2020.05.02
백준 14888. 연산자 끼워넣기  (0) 2020.05.02
백준 2573. 빙산  (0) 2020.05.01