문제 설명

Untitled

문제 분석

Untitled

Untitled

Untitled

슈도코드

Untitled

구현

public class DFS와_BFS_프로그램_1260 {
    static ArrayList<Integer>[] adj;
    static boolean[] visited;

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer = new StringTokenizer(bufferedReader.readLine());
        int N = Integer.parseInt(tokenizer.nextToken()); // 노드의 개수
        int M = Integer.parseInt(tokenizer.nextToken()); // 에지의 개수
        int V = Integer.parseInt(tokenizer.nextToken()); // 탐색 시작 노드

        adj = new ArrayList[N + 1];
        for (int i = 1; i <= N; i++) {
            adj[i] = new ArrayList<>();
        }

        for (int i = 1; i <= M; i++) {
            tokenizer = new StringTokenizer(bufferedReader.readLine());
            int s = Integer.parseInt(tokenizer.nextToken());
            int e = Integer.parseInt(tokenizer.nextToken());

            adj[s].add(e);
            adj[e].add(s);
        }

        // 노드 번호가 작은 것부터 시작해야 하므로 정렬.
        for(int i=1; i<=N; i++) {
            Collections.sort(adj[i]);
        }

        visited = new boolean[N + 1];
        DFS(V);

        System.out.println();

        Arrays.fill(visited, false);
        BFS(V);
    }

    private static void DFS(int node){
        System.out.print(node + " ");

        visited[node] = true;

        for(int i : adj[node]) {
            if(!visited[i]) {
                DFS(i);
            }
        }
    }

    private static void BFS(int node) {
        Queue<Integer> q = new LinkedList<>();
        // 시작 노드 방문 처리
        q.add(node);
        visited[node] = true;

        while(!q.isEmpty()) {
            int curNode = q.poll();
            System.out.print(curNode + " ");
            for(int i : adj[curNode]) {
                if(visited[i]) continue;

                visited[i] = true;
                q.add(i);
            }
        }
    }
}