理解广度优先搜索

广度优先搜索的概念
解决最短路径问题的算法被称为广度优先搜索。
那么什么叫最短路径呢??
最短路径可以理解为你去朋友家的最短路程。在下象棋中,你将死对方的最少步数等。

在学习广度优先搜索之前,我们得了解一下图。
什么是图?
我的理解,图就是模拟一种关系连接。例如说 图就可以表示我要去小明家所有的路径:
在这里插入图片描述
不难看出,整个图都是由节点和边组成。一个节点可以和多个节点直接相连,这些节点被称为邻居节点。比如“地点C”就是“地点B”的邻居节点,同样“地点E”也是“地点B”的邻居节点。所以,图就是用于模拟不同的东西是如何相连的。

下面我们看广度优先搜索
广度优先搜索的基本思想
广度优先搜索是一种用于图的查找算法,可以解决两个问题:

  • 从节点A出发,有没有到节点B的路径?

  • 从节点A出发,哪条路径到节点B最短?
    下面我们举例说明:
    假设你刚开了一家科技公司,公司需要聘请一位产品销售员,所以你就开始向你的朋友打听,看看有没有谁干过销售?
    在这里插入图片描述
    然后你创建一个朋友名单,就挨个打电话询问,有没有人干过销售,结果都没有。那么接下来你就在你朋友的朋友中找。
    在这里插入图片描述
    然后你又在朋友的朋友中找,将朋友的朋友也加入之前创建的表单,使用这种算法将搜编你的整个人际关系网,直到找到干过销售的人。
    通过以上所述,我们发现是从中心向外扩散寻找,而不是一条道走到黑,然后再找下一条,这就是广度优先算法。
    所以我们就可以将之前的两个问题进行转化:

  • 在你的人际关系网中,有人干过销售吗?

  • 在干过销售的人中,哪一个跟你关系最近?

我们把你的朋友称作一度关系,把你朋友的朋友称作二度关系,广度优先就是先搜索一度关系再搜索二度关系,依次类推。搜索范围从起点开始逐渐向外延伸。
当找到跟你关系最近且干过销售的那个人,就说明找到了这个图的最短路径。

算法实现
在实现之前,我们得说一下队列,队列很简单,特征及其鲜明,“先进先出
首先我们需要实现图:
图中的每个节点都与邻节点相连,就类似于你和小红或小李的关系,表示关系当然就是散列表咯!
在这里插入图片描述
等于说针对于每一个节点都建一个数组来表示每个节点和邻居的关系。
算法工作原理如下:

  • 创建一个队列,用于存储要询问的人
  • 从队列中弹出一个人
  • 询问这个人是否干过销售
  • 如果过干过销售则结束
  • 如果没有干过销售就将这个人所有的邻居加入队列,接着从队列弹出一个人

依次循环询问,如果队列为空,就说明你的人际关系网中没有干过销售。
注意:每询问一个人,就标志一下已询问,不然就可能导致死循环。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值