python通过队列实现广度优先搜索

需求:找名字以m结尾的人,直到找到为止

虚拟出这个场景:

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"] = []

代码实现:

from collections import deque

# 找人名m结尾的人
def person_is_seller(name):
    return name[-1] == "m"


def main():
    #创建一个队列
    search_queue = deque()
    #将你的邻居加到这个队列中
    search_queue += graph['you']
    # 这个数据用于记录检查过的人
    searched = []
    #只要队列不为空,就取出第一个人
    while search_queue:
        person = search_queue.popleft()
        #当这个人没被检查过才检查
        if not person in searched:
            if person_is_seller(person):
                print(person + "是你要找的人")
                return True
            else:
                search_queue += graph[person]
                #检查过扔到list中
                searched.append(person)
    return False

if __name__ == '__main__':
    main()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,524评论 25 709
  • 致良知是一种伟大的力量 --------读书会学习有感 各位亲爱伙伴、亲爱的朋友: 昨天下午的学习虽然人很少,但却...
    阿祺张阅读 1,176评论 0 0
  • 虽然最后还是决定离开了,可是在公司参加了7天的培训还是有很多收获的,记录下来,至于离开的原因,我思考了很久,外因也...
    破茧人阅读 1,007评论 0 0
  • 四年前,我看了盗墓笔记。适逢十年之约,我和小伙伴们来到了长白山。我们避过了8月17的高峰期,八月初,坐了一天的火车...
    简单鹿阅读 1,521评论 1 0
  • Kotlin的data class 专门用来构造数据类,很多时候我们需要构造一个类来作为数据的集合。今天碰到一个问...
    chenxiangx阅读 13,039评论 1 1