广度优先搜索(适合找出最短路径)
‘’‘例:在朋友关系图中,找出自己需要的人’’’
附图片:
from collections import deque
def search(name):
#创建队列(先进先出)
search_queue = deque()
#把当前人名的第一度关系朋友加入队列
search_queue += graph[name]
#防止重复添加造成死循环
searched = []
while search_queue:
#每次取队列第一个
person = search_queue.popleft()
#检查是否查询过
if person not in searched:
#检查是否是正确答案
if person_is_success(person):
return True
else:
#检查过的添加进列表
searched.append(person)
# 把当前人名的第一度关系朋友加入队列
search_queue += graph[name]
return False
def person_is_success(name):
if name == '正确的':
return True
算法运行时间:O(V+E)(V:顶点,即人数)(E:边数)
将一个人添加进队列为O(1),所有人为O(人数)
沿每条边运行,所有边为O(边数)