연결요소의 개수

문학적인유사성·2022년 10월 3일
0

language

목록 보기
11/24

인접리스트로 풀어야하는 문제를 따로 찾아서 풀어봤다.
일단 인접리스트로 풀어야하는 문제는 감 되찾은 것같다.
내일은 그냥 행렬로 풀어야되는거랑 잊어버린 것들 다시 확인해야겠다.

import java.util.*;
import java.io.*;

public class NumberOfConnection_11724{

    static int N;
    static int M;

    static ArrayList<Integer>[] nodelist;
    static boolean[] visited;

    public static void bfs(int start){
        LinkedList<Integer> list = new LinkedList<Integer>();

        list.add(start);
        visited[start]=true;

        while(!list.isEmpty()){
            int temp = list.poll();
            
            for(int j=0;j<nodelist[temp].size();j++){
                if(visited[nodelist[temp].get(j)]==true){
                    continue;
                }

                list.add(nodelist[temp].get(j));
                visited[nodelist[temp].get(j)]=true;
            }

        }
    }

    public static void dfs(int start){
        visited[start]=true;

        for(int x=0;x<nodelist[start].size();x++){
            if(visited[nodelist[start].get(x)]==true){
                continue;
            }

            dfs(nodelist[start].get(x));
        }
    }

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

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

        String[] str = br.readLine().split(" ");

        // 1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2 인접 리스트 써야겠다. 연습삼아 하는 거니까!
        N = Integer.parseInt(str[0]);
        M = Integer.parseInt(str[1]);
        // init
        nodelist = new ArrayList[N+1];
        for(int i=0;i<N+1;i++){
            nodelist[i] = new ArrayList<Integer>();
        }

        visited = new boolean[N+1];
        
        for(int i=0;i<M;i++){
            String[] str1 = br.readLine().split(" ");
            int temp_node = Integer.parseInt(str1[0]);
            int temp_next = Integer.parseInt(str1[1]);
            //방향이 없는 그래프 
            nodelist[temp_node].add(temp_next);
            nodelist[temp_next].add(temp_node);
        }

        // for(int x=0;x<N+1;x++){
        //     for(int y=0;y<nodelist[x].size();y++){
        //         System.out.print(nodelist[x].get(y)+" ");
        //     }
        //     System.out.println(" ");
        // }

        int number_of_connections = 0;
        //연결 요소의 개수 확인
        for(int i=1;i<N+1;i++){
            if(visited[i]==false){
                //dfs(i);
                bfs(i);
                number_of_connections++;
            }
        }

        System.out.println(number_of_connections);
        return;
    }

}
profile
Are you nervous? Don't be

0개의 댓글