
그래프 = node + edge
node: 데이터를 표현하는 단위
edge: 노드를 연결해줌
그래프의 사이클이 생성되는지를 판별하는 알고리즘
i) 사이클 X (전-후 관계가 있음) ii) 방향 O
특징 : 값(결과)이 유일하지 않음
예시: 수강신청 (과목 I -> 과목 II)
조건 : 음수 간선 O
특징 : 시작점이 있고, 다른 모든 노드로 가는 최단거리를 구하는 알고리즘
-> 음수 사이클이 있는지 체크하는 문제 많이 나옴
예시 : 시간여행 할 수 있는지? (과거로 돌아갈 수 있는지)
- 그래프를 표현하는 3가지 방법
1) 에지 리스트 , 2) 인접 행렬, 3) 인접 리스트
-> 에지 중심으로 그래프 표현
가중치 없는 그래프 표현

가중치가 있는 표현

-> 2차원 배열을 자료구조로 이용하여 그래프로 표현
(노드 중심으로 그래프 표현)
인접 행렬을 이용하여 가중치가 없는 그래프 표현

인접 행렬을 이용한 가중치가 있는 그래프 표현

가장 많이 사용함.
그래프 구현은 복잡하지만, 노드와 연결되어 있는 에지를 탐색하는 시간이 매우 뛰어나고 메모리 초과 에러도 발생하지 않음.
인접 리스트로 가중치 없는 그래프 표현하기

ArrayList<Integer>[N]
인접 리스트로 가중치 없는 그래프 표현

ArrayList<Node>[N]
Node -> class