728x90
반응형

인접 리스트는 그래프 이론에서 그래프를 표현하기 위한 방법 중 하나입니다. 그래프의 한 꼭짓점에서 연결되어 있는 꼭짓점들을 하나의 연결 리스트로 표현하는 방법입니다. 인접 행렬에 비하여 변이 희소한 그래프에 효율적 입니다.

동작방식

아래와 같은 그래프가 존재할때 인접행렬을 만들어 보겠습니다. 1노드에서 시작하여 2,3 노드로 연결됩니다. 그리고 3노드는 2,4 노드로 연결됩니다. 이는 단방향을 나타내고 있음을 알수 있습니다. 2차원 배열을 준비하고 배열의 Y축을 시작 좌표, 배열의 X축을 그래프가 향하는 노드라고 생각을하고 아래 그림과 같이 만들어 사용을 합니다.

참고사이트

https://ko.wikipedia.org/wiki/%EC%9D%B8%EC%A0%91_%EB%A6%AC%EC%8A%A4%ED%8A%B8
 

인접 리스트 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

기본코드

위 그래프를 만드는 방법과 간단히 순환하는 순서를 나타내는 코드입니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

public class Test {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    static ArrayList<ArrayList<Integer>> alist = new ArrayList<ArrayList<Integer>>();

    static void run(int now)
    {
        System.out.print(now + " ");

        for (int i = 0; i<alist.get(now).size(); i++) {
            run(alist.get(now).get(i));
        }
    }

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

        for (int i = 0; i < 5; i++) {
            alist.add(new ArrayList<>());
        }

        alist.get(1).add(2);
        alist.get(1).add(3);
        alist.get(3).add(2);
        alist.get(3).add(4);

        run(1);

        br.close();
        bw.close();        
    }
}

결과는 "1 2 3 2 4 "로 나타납니다.

728x90
반응형

+ Recent posts