그림 12-2를 보면 같은 그래프이지만 나열 순서가 다르지요. 그림 12-2에서 유의해서 볼 점은 모든 간선의 방향이 왼쪽에서 오른쪽이라는 것입니다. 오른쪽에서 왼쪽으로 오는 에지가 있다면 그것은 사이클이 있다는 것입니다.

    위상 정렬을 구현해 보겠습니다. 먼저 그래프 표현부터 볼까요?1

    코드 12-1

    class DAG:
        def __init__(self, vertex_num):
            self.adj_list = [[] for _ in range(vertex_num)]
            self.visited = [False for _ in range(vertex_num)]
    
        def add_edge(self, u, v):
            # u: tail, v: head
            self.adj_list[u].append(v)

    코드 12-1은 DAG에 사용할 그래프입니다. 내부 표현은 인접 리스트를 이용할 것입니다. add_edge() 메서드를 보면 방향 그래프이므로 u가 꼬리, v가 머리입니다.

     

     


    1 12장 전체 코드는 topological_sort.py 파일에 있습니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.