프로그래밍/JAVA

[Java] 자바로 인접행렬, 인접리스트 구현하기

노력의천재 2022. 10. 13. 11:57

작성 코드

public class Main {

    static int n, m;
    static int[][] arr;
    static ArrayList<Integer>[] list;

    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());

        /* 배열 & 리스트 초기화 */
        arr = new int[n + 1][n + 1];
        list = new ArrayList[n + 1];
        for (int i = 1; i <= n; i++) {
            list[i] = new ArrayList<>();
        }

        /* 인접행렬 & 인접리스트 생성 */
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int from = Integer.parseInt(st.nextToken());
            int to = Integer.parseInt(st.nextToken());
            arr[from][to] = 1;
            arr[to][from] = 1;
            list[from].add(to);
            list[to].add(from);
        }

        /* 인접행렬 출력 */
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }

        System.out.println("================================================");

        /* 인접리스트 출력 */
        for (int i = 1; i <= n; i++) {
            System.out.print(i + " : ");
            for (int j = 0; j < list[i].size(); j++) {
                System.out.print(list[i].get(j) + " ");
            }
            System.out.println();
        }
    }
}

 

입력 값

5 7
1 4
4 1
1 3
4 3
3 5
4 5
4 2

 

출력 결과

0 0 1 1 0 
0 0 0 1 0 
1 0 0 1 1 
1 1 1 0 1 
0 0 1 1 0 
================================================
1 : 4 4 3 
2 : 4 
3 : 1 4 5 
4 : 1 1 3 5 2 
5 : 3 4