파이썬 너비우선탐색 알고리즘 이해가 안되서 질문합니다.
조회수 819회
너비우선탐색 알고리즘 이해가 안되서 질문합니다.
너비우선탐색 알고리즘 구현 문제입니다. 사진에 있는 그래프를 딕셔너리형으로 나타냈습니다.
- 확인할 사람의 명단을 넣을 deque(양방향 큐)를 준비한다.
- 큐에서 한 사람씩 꺼낸다.
- 이 사람이 망고 판매상인지 확인한다.
- 큐가 비어있다면 네트워크에는 망고 판매상이 없다.
*종료조건
- 망고 판매상이 발견되거나, 큐가 비는 경우
graph = {}
graph['you'] = ['alice', 'bob', 'claire'] graph['bob'] = ['anuj', 'peggy'] graph['alice'] = ['peggy'] graph['claire'] = ['thom', 'jonny'] graph['anuj'] = [] graph['peggy'] = [] graph['thom'] = [] graph['jonny'] = []
from collections import deque
def search(name): # 사람 검색하는 함수 search_queue = deque() # 큐를 선언 및 정의 search_queue += graph[name] # 그래프의명단을 큐에 대입 searched = [] # 이미 검색된 사람 리스트 선언
while search_queue: person = search_queue.popleft() if not person in searched: if person_is_seller(person): print(person + " is a mango seller") return True else: search_queue += graph[person] searched.append(person) return False
def person_is_seller(name): return name[-1] == 'm'
print(search_queue) print(search('thom'))
결과: deque(['alice', 'bob', 'claire'])
False
질문
search함수의 while문이 구동되는 순서와 원리가 이해가 안됩니다.
person_is_seller함수가 왜 있는지 의미를 모르겠네요.
댓글 입력