SWEA

swea 2814 [D3] 최장 경로 JAVA

녁이 2023. 11. 29. 02:55
728x90
반응형

최장 경로 = 방문한 정점의 수

풀이 :

무방향 그래프 -> dfs, visited[], ArrayList<>() 사용해서 방문했던 곳은 패스하고, 새로 방문하는 정점들을 타고 들어가면서 cnt++

 


Code

public class Solution2814v {

    static int N, M, ans;
    static boolean[] visited;
    static ArrayList<Integer>[] start;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();

        for (int tc = 1; tc <= T; tc++) {
            N = sc.nextInt();   // 정점 수
            M = sc.nextInt();   // 간선 수
            ans = 1;

            start = new ArrayList[N + 1]; // 각 노드에 연결된 정점들
            visited = new boolean[N + 1]; // 기본 초기화 : false, 1번 arrayList부터 사용하려고 +1, 노드 방문 여부

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

            // 각 노드마다 연결된 정점을 arrayList에 저장
            for (int i = 0; i < M; i++) {
                int from = sc.nextInt();    // 시작 정점
                int to = sc.nextInt();      // 도착 정점

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

            // 연결된 정점 모두 타고 들어가면서 Dfs
            for (int Strt = 1; Strt < N + 1; Strt++) {
                visited[Strt] = true;
                dfs(Strt, 1, 0);
                visited[Strt] = false;
            }
            System.out.println("#" + tc + " " + ans);

        }
    }

    private static void dfs(int startNode, int cnt, int depth) {
        ans = Math.max(ans, cnt);

        if (depth == N) return;

        // 연결된 노드로 타고 들어가기( 각 List 내에 arrayList에서 하나씩 확인 )
        for (int to = 0; to < start[startNode].size(); to++) {

            int next = start[startNode].get(to);

            // 방문했던 곳이라면 패스
            if (visited[next]) continue;

            // 처음 방문했다면
            visited[next] = true;
            dfs(next, cnt + 1, depth + 1);  // next 정점으로 이동
            visited[next] = false;

        }
    }
}
728x90
반응형

'SWEA' 카테고리의 다른 글

swea 3282 [D3] 0/1 Knapsack JAVA  (0) 2023.11.29
swea 2817 [D3] 부분 수열의 합 JAVA  (0) 2023.11.29
swea 2806 [D3] N-Queen JAVA  (0) 2023.11.29
swea 2805 [D3] 농작물 수확하기 JAVA  (1) 2023.11.29
swea 1873 [D3] 상호의 배틀필드 JAVA  (2) 2023.11.24