广度优先搜索

115 阅读2分钟

本章内容

  1. 学习使用新的数据结构图来建立网络模型。
  2. 学习广度优先搜索,你可对图使用这种算法回答诸如“到X的最短路径是什么”等问题。
  3. 学习有向图和无向图。
  4. 学习拓扑排序,这种排序算法指出了节点之间的依赖关系。

本章将介绍图。首先,我将说说什么是图(它们不涉及X轴和Y轴),再介绍第一种图算法——广度优先搜索(breadth-first search,BFS)。

广度优先搜索让你能够找出两样东西之间的最短距离,不过最短距离的含义有很多!使用广度优先搜索可以:

  • 编写国际跳棋AI,计算最少走多少步就可获胜;

  • 编写拼写检查器,计算最少编辑多少个地方就可将错拼的单词改成正确的单词,如将READED改为READER需要编辑一个地方;

  • 根据你的人际关系网络找到关系最近的医生。

在我所知道的算法中,图算法应该是最有用的。请务必仔细阅读接下来的几章,这些算法你将经常用到

6.1 图简介

1.png

假设你居住在旧金山,要从双子峰前往金门大桥。你想乘公交车前往,并希望换乘最少。可乘坐的公交车如下。

2.png

为找出换乘最少的乘车路线,你将使用什么样的算法?

一步就能到达金门大桥吗?下面突出了所有一步就能到达的地方。

3.png

金门大桥未突出,因此一步无法到达那里。两步能吗?

4.png

金门大桥也未突出,因此两步也到不了。三步呢?

5.png

金门大桥突出了!因此从双子峰出发,可沿下面的路线三步到达金门大桥。

6.png

还有其他前往金门大桥的路线,但它们更远(需要四步)。这个算法发现,前往金门大桥的最短路径需要三步。这种问题被称为最短路径问题(shorterst-path problem)。你经常要找出最短路径,这可能是前往朋友家的最短路径,也可能是国际象棋中把对方将死的最少步数。解决最短路径问题的算法被称为广度优先搜索。

要确定如何从双子峰前往金门大桥,需要两个步骤。

(1) 使用图来建立问题模型。

(2) 使用广度优先搜索解决问题。

下面介绍什么是图,然后再详细探讨广度优先搜索。