이차원 ArrayList를 이용한 그래프 구현
1. 이차원 ArrayList 선언과 초기화
class Edge {
int endNode;
int value;
}
그래프의 에지를 표현하는 클래스를 만들었다.
ArrayList<Edge> List[] = new ArrayList[10];
크기가 10이고 자료형이 ArrayList인 배열을 선언한 코드이다. 보통 이렇게 선언하면 초기화가 완료되었다고 착각하는 경우가 있지만 아직 10개의 ArrayList 각각에 다음과 같은 생성 작업(메모리 할당)을 추가로 해야한다.
for (int i=0; i<10; i++) {
List[i] = new ArrayList<Edge>();
}
이제 초기화를 완료했다. 이어서 이렇게 생성한 이차원 ArrayList에 그래프 데이터를 저장해 보자.
2. 그래프 데이터 저장하기

위의 그래프가 있다고 가정했다.
3 4 // 노드가 3개, 에지가 4개인 그래프
1 2 4 // 1번 노드에서 2번 노드로 가는 가중치 4의 에지가 있음
2 1 10
1 3 7
3 2 6
위의 입력값을 ArrayList 자료구조를 이용해서 저장한다.
for (int i = 0; i < E; i++) {
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
list[s].add(new Edge(e, v));
}
3. 그래프 데이터 가져오기
1번 노드에서 시작되는 에지 데이터 가져오자
for (int i = 0; i < list[1].size(); i++) {
Edge tmp = list[1].get(i);
int next = tmp.endNode;
int value = tmp.value;
}

Share article