算法——广度优先搜索

目标:

①学习使用新的数据结构图来建立网络模型

②学习广度优先搜索,你就可以对图使用这种算法回答诸如:到X的最短路径是什么等

③学习有向图和无向图

④学习拓补排序,这种算法指出了节点之间的依赖关系

 

广度优先搜索——解决最短路径

可以: 编写国际跳棋AI,计算最少走多少步可以获胜

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

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

 

图由节点构成,一个节点可能与多个节点直接相连

广度优先搜索是一种用于图的查找算法,可帮助回答两类问题: ①从节点A出发,有前往B的路径吗? ②如果有,那条路径最短?

 

比如找到关系最近的医生,你先找朋友(一度关系),没有朋友是医生,找朋友的朋友(二度关系)……

 

引入队列,队列是先入先出 就像一根水管,先进入的水先出去(不同于栈,先进后出)

 

算法——广度优先搜索_第1张图片

 

 

 这是python散列表表现的,前面是节点后面是节点的邻居。

 

 

 代码实现:

算法——广度优先搜索_第2张图片

 

 

   如果邻居不是芒果销售商,代码将加入邻居的邻居               检查过的人不能再次检查

 

拓补排序:任务A依赖于任务B,起床后才能刷牙这样的类似。

假如要举办婚礼,有很大一张图,都是你要做的事情,却不知道从哪里开始。 就可以使用拓补排序创建一个有序的任务表。

这就是树,连通无回路的有向图

 

小结:

①广度优先搜索指出是否有从A到B的路径,有则找出最短路径

②面临寻找最短路径问题,可以尝试使用图建立模型,再用广度优先搜索来解决问题

③队列先进先出,栈后进先出

④需要按加入顺序检查搜索列表的人,否则找到的就不是最短路径,搜索列表必须是队列

⑤对于检查过的人,务必不要再去检查

你可能感兴趣的:(算法——广度优先搜索)