今天我们来学习一下另一种算法----广度优先搜索
解决最短路径问题的算法被称为广度优先搜索
图是什么:
图模拟一组连接,图用于模拟不同的东西是如何相连的
图由节点(node)和边(edge)组成
一个节点可能与众多节点直接相连,这些节点被称为邻居
查找最短路径:
第一类问题:从节点A出发,又前往节点B的路径吗?
第二类问题:从节点A出发,前往节点B哪条路径最短?
解决第二类问题,我们可以看做一度关系大于二度关系,二度关系大于三度关系…,因此我们现在一度关系中查找,若没有找到,则在二度关系中查找…直到找到目标,我们可以依次将一度关系,二度关系…按顺序加入到一个查找名单,这样我们就会先找到离我们最近的目标了,有一种可以实现这种目的的数据结构----队列
队列:
队列类似于栈,你不能随机的访问队列中的元素,队列只支持两种操作:入队和出队
队列是一种先进先出(First In First Out,FIFO)的数据结构,而栈是一种后进先出(Last In First Out,LIFO)的数据结构
实现图:
散列表能够实现每个节点都与邻节点相连的关系,散列表能够将键映射到值
键—值对的添加顺序重要吗?散列表是无序的,因此添加键—值对的 顺序无关紧要
节点与节点的关系是单向的,没有指向别人的箭头我们称为有向图
节点与节点之间没有箭头,直接相连的节点互为邻居,这就叫做无向图
实现算法:
更新队列时,我使用术语“入队”和“出队”,但你也可能遇到术语“压入”和“弹出”。 压入大致相当于入队,而弹出大致相当于出队