算法——广度优先搜索
目标:
①学习使用新的数据结构图来建立网络模型
②学习广度优先搜索,你就可以对图使用这种算法回答诸如:到X的最短路径是什么等
③学习有向图和无向图
④学习拓补排序,这种算法指出了节点之间的依赖关系
广度优先搜索——解决最短路径
可以: 编写国际跳棋AI,计算最少走多少步可以获胜
编写拼写检查器,计算最少编辑多少个地方就可把拼错的单词改成正确的单词,比如READED改READER需要编辑一个地方
根据你的人际关系网络找到关系最近的医生等等
图由节点构成,一个节点可能与多个节点直接相连
广度优先搜索是一种用于图的查找算法,可帮助回答两类问题: ①从节点A出发,有前往B的路径吗? ②如果有,那条路径最短?
比如找到关系最近的医生,你先找朋友(一度关系),没有朋友是医生,找朋友的朋友(二度关系)……
引入队列,队列是先入先出 就像一根水管,先进入的水先出去(不同于栈,先进后出)

这是python散列表表现的,前面是节点后面是节点的邻居。
![]()
代码实现:

如果邻居不是芒果销售商,代码将加入邻居的邻居 检查过的人不能再次检查
拓补排序:任务A依赖于任务B,起床后才能刷牙这样的类似。
假如要举办婚礼,有很大一张图,都是你要做的事情,却不知道从哪里开始。 就可以使用拓补排序创建一个有序的任务表。
这就是树,连通无回路的有向图
小结:
①广度优先搜索指出是否有从A到B的路径,有则找出最短路径
②面临寻找最短路径问题,可以尝试使用图建立模型,再用广度优先搜索来解决问题
③队列先进先出,栈后进先出
④需要按加入顺序检查搜索列表的人,否则找到的就不是最短路径,搜索列表必须是队列
⑤对于检查过的人,务必不要再去检查

浙公网安备 33010602011771号