더북(TheBook)

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’)

 

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