广度优先搜索

步骤:
先用代码建立图模型,然后将图中元素按深度顺序进行判断
注意:一定要创建一个记录已经测试过的人物的数组,否则互为朋友的人物会导致无限循环

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值