[백준]24480 알고리즘 수업 - 깊이 우선 탐색2

서은경·2023년 1월 5일
0

CodingTest

목록 보기
50/71
package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main_24480 {
    static ArrayList<ArrayList<Integer>> dfs = new ArrayList<>();
    static boolean[] visit;
    static int[] seq;
    static int M, N, sequence;
    public static void main(String[] args) throws IOException {
        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 R = Integer.parseInt(st.nextToken());   // 시작 정점

        visit = new boolean[N+1];
        seq = new int[N];
        for (int i = 0; i < N+1; i++) {
            dfs.add(new ArrayList<>());
        }

        for (int i = 0; i < M; i++) {
            StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");
            int u = Integer.parseInt(st2.nextToken());
            int v = Integer.parseInt(st2.nextToken());

            dfs.get(u).add(v);
            dfs.get(v).add(u);
        }
        for (ArrayList<Integer> d : dfs) {
            Collections.sort(d, Collections.reverseOrder());
        }
        dfs(R);
        for (int i : seq) {
            System.out.println(i);
        }
    }
    public static void dfs(int start) {
        if (!visit[start]) {
            seq[sequence++] = start;
            visit[start] = true;
            for (Integer integer : dfs.get(start)) {
                dfs(integer);
            }
        }
    }
}

24479랑 같은 문젠데 좀 다르게 풀었더니 틀렸다.. 뭐가 문제일까? 고민해보고 수정해야지

seq[start] = ++sequence;

seq 배열 넣어주는 부분이 잘못돼서 여기만 고쳤더니 맞았다.. 정점의 순서대로 방문한 순서를 출력해야하는데 방문순서대로 정점을 출력해서 틀린거였음!

0개의 댓글

관련 채용 정보