无向图互为邻居
通过图的连接关系,一步一步搜索
问题解决步骤 使用图建立问题模型 使用广度优先算法解决问题 实现图利用字典实现图
注意:peggy是alice的邻居,但alice不是peggy的
"""实现图——字典"""
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 person_is_seller(name):
return name[-1] == 'm' # 检查人的名字末尾是否为‘m’,是则return True,不是则return False
def search(name):
search_queue = deque() # 创建双端队列
search_queue += graph[name] # 将name的关系网(邻居)加入到队列中
searched = [] # 这个数组用于记录检查过的人
while search_queue:# 队列不空
person = search_queue.popleft()
if person not in searched:
if person_is_seller(person):
print("Find " + person)
else:
search_queue += graph[person] # 将person的邻居加入到队列中
searched.append(person)
search('you')
Find thom
注意:一定要判断重复,除了减少重复检查,也避免无限循环