步骤:
先用代码建立图模型,然后将图中元素按深度顺序进行判断
注意:一定要创建一个记录已经测试过的人物的数组,否则互为朋友的人物会导致无限循环
from collections import deque #导入所需库
graph={} #建立映射关系,注意“你”被映射到了一个数组,因此graph["you"]是一个数组,其中包含了“你”的所有朋友
graph["you"]=["alice","bob","claire"]
graph["alice"]=["zhou","joke","tom"]
graph["bob"]=["zhou","alice"]
graph["claire"]=["you","bob"]
graph["zhou"]=[] #朋友的朋友也要建立映射,否则会报错
graph["joke"]=[]
graph["tom"]=[]
def person_is_seller(name): #判断人物是否符合条件,如果名字最后一个字母是'm'则满足条件
return name[-1]=='m'
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 Flase
search("you")