python实现广度优先搜索,查找芒果经销商

《算法图解》第6章相关内容


from collections import deque

graph = {}           #创建一个字典,存储人际关系图
graph["you"] = ["alice", "bob", 'claire']
graph['bob'] = ['anuj', 'peggy']
graph['alice'] = ['peggy']
graph['claire'] = ['thom', 'jonny']
graph['anuj'] = []
graph['peggy'] = []
graph['jonny'] = []
graph['thom'] = []

def search(name):
    search_quene = deque()     #创建一个队列,用于存储要检查的人
    search_quene += graph[name]   #将name的邻居加入到这个队列
    searched = []              #用来存储已经检查过的人         
    while search_quene:         #如果队列不为空
        person = search_quene.popleft()       #从队列中弹出一个人
        if person not in searched:           #如果这个人没有被检查过
            if person_is_seller(person):      #如果这个人是经销商
                print(person + " is a mango seller!")   #大功告成并退出
                return True
            else:                    #否则
                search_quene += graph[person]    #把这个人的邻居加入到队列
                searched.append(person)          #把这个人加入到已查找列表
    return False      #没有找到任何经销商
    
def person_is_seller(name):
    return name[-1] == 'm'
            
search("you")            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值