美文网首页
广度优先搜索

广度优先搜索

作者: Amica | 来源:发表于2018-08-27 19:22 被阅读18次
    • 广度优先搜索指出是否有A到B的路径
    • 如果有,广度优先搜索将找出最短的路径
      面临类似于找最短路径的问题时,可以尝试使用图来建立模型,再使用广度优先搜索来解决问题。

    应用实例

    假设你经营这一个芒果农场,需要寻找芒果销售商,以便将芒果卖给他。在Facebook,你与芒果销售商有联系吗?为此,你可在朋友中查找,这种查找很简短。首先创建一个朋友名单,然后依次检查名单中的每个人,假设你没有朋友是销售商,那你就有必要在朋友的朋友中查找。检查名单中的每个人时,你都将其朋友加入名单。
    这样一来,你不仅在朋友中查找,还在朋友的朋友中查找。你的目标是在你的人际关系网中找到一位芒果销售商。因此,如果Alice不是芒果销售商,就将其朋友也加入到名单中。这意味着你将在他的朋友,朋友的朋友中查找。使用这种算法将搜索遍你的整个人际关系网,直到找到芒果销售商。这就是广度优先搜索算法。下面的程序就是对该实例的算法实现。

    # encoding: utf-8
    
    from collections import deque
    
    #判断一个人是不是芒果销售商
    def person_is_seller(name):
        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 False
        
    
    if __name__ == "__main__":
        
        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"]=[]
        
        search("you")
    
    

    相关文章

      网友评论

          本文标题:广度优先搜索

          本文链接:https://www.haomeiwen.com/subject/jdstwftx.html