icon_cakewalk 프로그램 15-2

     

    모든 친구를 찾아서 친밀도를 계산하는 알고리즘

     

    ◉ 예제 소스 p15-2-friend.py

    # 친구 리스트에서 자신의 모든 친구를 찾고 친구들의 친밀도를 계산하는 알고리즘

    # 입력: 친구 관계 그래프 g, 모든 친구를 찾을 자신 start

    # 출력: 모든 친구의 이름과 자신과의 친밀도

     

    def print_all_friends(g, start):

        qu = []       # 기억 장소 1: 앞으로 처리해야 할 (사람 이름, 친밀도) 튜플을 큐에 저장

        done = set()  # 기억 장소 2: 이미 큐에 추가한 사람을 집합에 기록(중복 방지)

     

        qu.append((start, 0))   # (사람 이름, 친밀도) 정보를 하나의 튜플로 묶어 처리

                                # 자기 자신의 친밀도: 0

        done.add(start)         # 집합에도 추가

     

        while qu:               # 큐에 처리할 사람이 남아 있는 동안

            (p, d) = qu.pop(0)  # 큐에서 (사람 이름, 친밀도) 정보를 p와 d로 각각 꺼냄

            print(p, d)         # 사람 이름과 친밀도를 출력

            for x in g[p]:      # 친구들 중에

                if x not in done:          # 아직 큐에 추가된 적이 없는 사람을

                    qu.append((x, d + 1))  # 친밀도를 1 증가시켜 큐에 추가하고

                    done.add(x)            # 집합에도 추가

     

    fr_info = {

        ‘Summer’: [‘John’, ‘Justin’, ‘Mike’],

        ‘John’: [‘Summer’, ‘Justin’],

        ‘Justin’: [‘John’, ‘Summer’, ‘Mike’, ‘May’],

        ‘Mike’: [‘Summer’, ‘Justin’],

        ‘May’: [‘Justin’, ‘Kim’],

        ‘Kim’: [‘May’],

        ‘Tom’: [‘Jerry’],

        ‘Jerry’: [‘Tom’]

    }

     

    print_all_friends(fr_info, ‘Summer’)

    print()

    print_all_friends(fr_info, ‘Jerry’)

     

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