코딩테스트

백준 1260번 DFS와 BFS (자바)

leeeehhjj 2021. 6. 11. 14:49

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Test {

    static int n;
    static int m;
    static int[][] adjacent;
    static boolean[] visited;
    public static void main(String args[]) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        int startNum = Integer.parseInt(st.nextToken());
        adjacent = new int[n+1][n+1];
        visited = new boolean[n+1];
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int n1 = Integer.parseInt(st.nextToken());
            int n2 = Integer.parseInt(st.nextToken());
            adjacent[n1][n2] = 1;
            adjacent[n2][n1] = 1;
        }
        dfs(startNum);
        visited = new boolean[n+1];
        System.out.println();
        bfs(startNum);

    }
    static void dfs(int start) {
        visited[start] = true;
        System.out.print(start + " ");
        for(int i = 1; i < (n+1); i++) {
            if(adjacent[start][i] == 1 && !visited[i]) {
                dfs(i);
            }
        }
    }
    static void bfs(int start) {
        Queue<Integer> queue = new LinkedList<>();
        visited[start] = true;
        queue.add(start);
        System.out.print(start + " ");
        while (!queue.isEmpty()) {
            int tmp = queue.poll();
            for (int i = 0; i < (n+1); i++) {
                if(adjacent[tmp][i] == 1 && !visited[i]) {
                    queue.add(i);
                    visited[i] = true;
                    System.out.print(i + " ");
                }
            }
        }
    }
}