8、广度优先搜索

一、择路问题

      假设你要从A城市前往B城市,途中可以选择几条路径,该怎样选择才能做到最快到达B城(假设从一个城市到临近城市用时相同)。如图:

二、图模型

      无论数组还是链表,储存的数据都是相互独立、互不相干的。但像上面所提出的择路问题一样,城市与城市之间是有连接的。像解决这种数据与数据相关联的问题时,我们所用到的模型叫图模型。

      图模型我们用散列表来实现。

三、广度优先搜索

      类似于数组的二分查找,图模型也有自己的数据查找算法,就是广度优先搜索。

      广度优先搜索解决两类问题:①图模型中,两节点之间有无路径;②两节点之间的最短路径。

四、芒果经销商问题

      问题:如果你有一个芒果农场,你要寻找芒果经销商卖出你的芒果,请问你应该怎样在你朋友圈中查找?

      解决思路:建立一个名单,把你的朋友全部写进去。逐一排查每一个朋友,如果他不是芒果经销商,则把他的朋友加入到排查名单上......

      这就是广度优先搜索,先从源节点查询它的邻节点,然后从各邻节点查询它们的邻节点,直到找到目标位置。

五、队列

      上面提到一个名单,能让我们从名单前面取出元素,然后从名单后面追加元素。这就是一个队列,队列是一种先进先出的数据结构。它就像我们平时的排队队伍一样,先进入队伍的人先走出队伍得到服务。

六、查找经销商的算法实现。

1、步骤:

(1)建立图模型;

(2)创建队列,把源节点的邻节点加入到队列;

(3)创建已检查名单;

(4)循环检查过程。

2、代码示例:

 

原文地址:https://www.cnblogs.com/lqxing1994/p/9254603.html