这里给出一个广度优先算法的简单实例,得到的是关系最近的人。

首先,广度优先搜索可回答两类问题:

  • 第一类问题:从A点出发,有没有前往B点的路径?

  • 第二类问题:从A点出发,前往B点的哪条路径最短?

实例:假设你经营一个芒果农场,需要寻找芒果销售商,以便将芒果卖给他,为此你可以在朋友中查找!如果朋友中没有芒果销售商,那么你可以在朋友的朋友中查找!算法如下。。

朋友关系网络


# coding=utf-8
from collections import dequedef person_is_seller(name):return name[-1] == 'm'  # 判断是否是以'm'结尾graph = {} # 此处的排序是按照图的关系排序的
graph["you"] = ["alice", "bob", "claire"]
graph["bob"] = ["anuj", "peggm"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom", "jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []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] # 添加新的联系人到待检查的队列中print 'search_queue:',search_queue searched.append(person)  #添加检查过的人到列表中print 'searched:',searchedreturn False # 整个while循环之后,还没有找到就返回Falsesearch("you")

运行结果:

>>>
====== RESTART: C:\Users\LiLong\Desktop\Algorithm\search_algorithms.py ======
search_queue: deque(['bob', 'claire', 'peggy'])
searched: ['alice']
search_queue: deque(['claire', 'peggy', 'anuj', 'peggm'])
searched: ['alice', 'bob']
search_queue: deque(['peggy', 'anuj', 'peggm', 'thom', 'jonny'])
searched: ['alice', 'bob', 'claire']
search_queue: deque(['anuj', 'peggm', 'thom', 'jonny'])
searched: ['alice', 'bob', 'claire', 'peggy']
search_queue: deque(['peggm', 'thom', 'jonny'])
searched: ['alice', 'bob', 'claire', 'peggy', 'anuj']
peggm is a mango seller!
>>> 

可以看到搜索到了要求的目标,并且是关系最近的一个,这里用到的图是最简单的,无权值的有向图。

其中的散列表的排序是按照图的关系排序的:

广度优先搜索(入门)相关推荐

  1. 广度优先搜索_计算机入门必备算法——广度优先遍历搜索

    1.  序言 又很久没有学习了,上次学到哈希表又称散列表的相关知识,这次我们学习一种新的数据结构来建立网络模型.这种数据结构被称作图.首先,我们先应该先了解一下什么是图,其次学习第一种图的算法,这种图 ...

  2. 广度优先搜索_快速入门广度优先搜索

    通过学习图的搜索算法,我们来学习下两种常见的算法:BFS.DFS. 广度优先搜索(BFS) 广度优先搜索(Breadth-First-Search),它更像是一种地毯式.层层推进的搜索策略.先从距离起 ...

  3. 数据结构 图 简单入门 最小生成树 深度优先搜索 广度优先搜索

    早上上班路上,看到一则新闻,广州的.新闻说的是一个辅警在路边查过往路人的身份证,其中有一个记者,就询问,根据哪条法律要查询他的身份证.辅警当然不知道(事后据说,就是闲着无聊,查着玩的!),也肯定不会认 ...

  4. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  5. 深度优先搜索及广度优先搜索

    一.深度优先搜索. 1.主要思想:首先以一个未被访问过的顶点作为起始顶点,沿当前顶点走到未被访问顶点,当没有未被访问顶点时,返回上一个顶点,继续访问别的顶点,直到所有的顶点都被访问过. 2:主要通过循 ...

  6. 图的广度优先搜索(BFS)和深度优先搜索(DFS)算法解析

    BFS和DFS算法解析 [算法入门] 2018/6/2 1.前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次. 但是图的遍历相对树而言要更为复杂. ...

  7. 《算法图解》学习笔记(六):图和广度优先搜索(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  8. 《算法笔记》学习日记——8.2 广度优先搜索(BFS)

    目录 8.2 广度优先搜索(BFS) 问题 A: Jugs 问题 B: DFS or BFS? 问题 C: [宽搜入门]8数码难题 问题 D: [宽搜入门]魔板 问题 E: [宽搜入门]巧妙取量 小结 ...

  9. 搜索入门之BFS宽度优先搜索

    基础搜索入门BFS BFS全称宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽 ...

最新文章

  1. starrocks问题小结
  2. Python的StringIO模块和cStringIO模块
  3. windows SOCKET编程
  4. autowired java配置_Spring自动注解标签@Autowired不能注入xml配置的bean吗?
  5. QT Media Error: DirectShowPlayerService::doRender: Unresolved error code 0x80040266
  6. mysql8 安装_mysql 8.x 安装向导
  7. PowerShell自动删除过期数据
  8. c++ 使用nacos_《Nacos系列》之注册中心
  9. 正则查找倒数第二个符合条件的字符串_EXCEL正则表达式的基础语法
  10. thinkphp 获取客户端ip地址方法
  11. ftp上传文件出现“sftp: cannot open /usr/SmartStore_test/1.zip to write”
  12. 个人对于MySQL的理解_MySQL锁的理解
  13. Linux备份数据 结果为0 原因:mysqldump command not found
  14. arm实验使用keil自带的MDK仿真教程
  15. 蓝宝石rx470d原版bios_小白福利教程:关于显卡BIOS的一些信息的讲解
  16. LabVIEW编程LabVIEW开发雷赛SMC6480运动控制模块例程与相关资料
  17. 无法绑定由多个部分组成的标识符 yvi312082007@163.com。
  18. TypeError: can only concatenate list (not “int“) to list
  19. 关于构建与优化数据仓库架构与模型设计
  20. 用jacob为word表格设置边框线

热门文章

  1. OpenCV相机位移引起的单应性的实例(附完整代码)
  2. OpenCV微笑探测器smile detector的实例(附完整代码)
  3. OpenCV 错误级别分析ELA的实例(附完整代码)
  4. C语言字符串转换为整数(附完整源码)
  5. QT的QPen类的使用
  6. QT的QNetworkDiskCache类的使用
  7. 「Apollo」百度Apollo感知模块(perception)红绿灯检测代码完整+详细解析
  8. 8.Eclipse中创建Maven Web项目
  9. 将虚拟机的版本改为1.6的方法
  10. websocket 获取连接id_nodejs做后端,用websocket写聊天室,怎么获取连接用户的ip呢?...