python实现广度优先搜索

思路:用字典来实现图,key值为节点,每个key对应的value值为一个队列,存储该节点的所有邻居节点。

# 广度优先搜索
from collections import deque
def research ():
    # 字典模拟图结构,假设从“you”出发,朋友关系网里找卖家,没有就在朋友的朋友的关系网里找。。。
    graph = dict ()
    graph[ "you" ] = [ "alice" , "bob" , "claire" ]
    graph[ "bob" ] = [ "anuj" , "peggy" ]
    graph[ "alice" ] = [ "peggy" ]
    graph[ "claire" ] = [ "thom" , "jonny" ]
    graph[ "anuj" ] = []
    graph[ "peggy" ] = []
    graph[ "thom" ] = []
    graph[ "jonny" ] = []
    # 创建一个队列,将首节点的邻居加入搜索队列
    que = deque()
    que += graph[ "you" ]
    # 用于标记是否被检查
    researched = []
    while que:
        # 队列不为空,取出第一个人
        person = que.popleft()
        if person not in researched:
            if person_is_seller(person):
                print (person + " is a seller" )
                return True
            else :
                # 当前搜索的人不是卖家,添加进已检查队列
                researched.append(person)
                que += graph[person]
    return False
def person_is_seller ( name ):
    # 假设名字最后一个字母为m的人就是卖家
    return name[ - 1 ] == "m"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值