녕의 학습 기록

백준_1260 DFS와BFS (DFS & BFS) 본문

Algorithm/Algorithm 문제

백준_1260 DFS와BFS (DFS & BFS)

kjyyjk 2024. 1. 22. 12:44

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class BJ_1260 {

    static ArrayList<Integer>[] arr;
    static boolean[] visited;
    static StringBuilder dfsResult;
    static StringBuilder bfsResult;

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int a, b;
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int v = Integer.parseInt(st.nextToken());

        arr = new ArrayList[n+1];
        visited = new boolean[n+1];
        dfsResult = new StringBuilder();
        bfsResult = new StringBuilder();

        for (int i=0; i<n+1; i++) {
            arr[i] = new ArrayList<>();
        }

        for(int i=0; i<m; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
            arr[a].add(b);
            arr[b].add(a);
        }

        for(ArrayList<Integer> array : arr) {
            Collections.sort(array);
        }

        dfs(v);
        visited = new boolean[n+1];
        bfs(v);

        System.out.println(dfsResult + "\n" + bfsResult);
    }

    static void dfs(int k) {
        visited[k] = true;
        dfsResult.append(k).append(' ');

        for (int i : arr[k]) {
            if(visited[i] == false) {
                dfs(i);
            }
        }
    }

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

        while(!queue.isEmpty()) {
            int nowNode = queue.poll();
            bfsResult.append(nowNode).append(' ');
            
            for(int i : arr[nowNode]) {
                if(visited[i] == false) {
                    visited[i] = true;
                    queue.add(i);
                }
            }
        }
    }
}

 

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net