그래프는 정점(노드라고도 함, vert)과 간선(edge)으로 이루어진 자료구조로 트리와 연관된 개념이다. 트리와 그래프의 차이는 아래 사진과 같다.
인접 리스트 그래프는 전체 노드 목록을 저장한다. 노드가 키가 되고 인접 노드가 값이 되는 딕셔너리로 구현한다.
위의 그래프를 인접 리스트로 표현하면 아래와 같다.
adjacency_list = {
'A': {'B'},
'B': {'C', 'D', 'E'},
'C': {'B'},
'D': {'B', 'E'},
'E': {'B', 'D', 'F'},
'F': {'E'}
}
인접 행렬은 노드간 연결이 되어 있으면 1, 연결이 되어있지 않으면 0으로 표현한 행렬로 2차원 배열로 구현할 수 있다. 만약 가중치 행렬이라면 1이 아닌 가중치 값을 넣어서 표현할 수 있다.
위의 그래프를 인접 행렬로 표현하면 아래와 같다.
adjacency_matrix = [
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0],
[0, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 1, 0],
[0, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 0]
]