最短路径问题(shortest-path problem)

步骤:
(1)使用图来建立问题模型;
(2)使用广度优先搜索解决问题
A. 图(Graph)是由节点(node)和边(edge)组成。相邻节点互成为邻居。
B. 广度优先搜索算法(Breadth-First Search,BFS)是一种用于图的查找算法。广度优先搜索算法可解决两类问题:
1)从图中节点A出发,找前往节点B的路径;
2)从图中节点A出发,找前往节点B的最短路径

一、回到第一个问题:案例人际关系中是否有经销商(类似是否有路径)。

查找朋友
查找朋友
查找朋友
查找朋友
查找朋友
查找朋友 A B否 H是 C否 D是 E否 F是

加入你是一位芒果农场主,需要寻求芒果经销商;上图是使用广度优先搜索算法,解决谁是芒果经销商的问题。

先创建你的朋友名单,在你的朋友名单中找出谁是经销商;若没有找到,则将你的朋友的朋友加入到搜索名单中,寻找谁是经销商,若未找到,则在你的朋友的朋友的朋友中继续寻找经销商;

二、回答第二个问题:谁是关系最近的经销商(类似查找最短路径)

查找朋友
查找朋友
查找朋友
查找朋友
查找朋友
查找朋友 A B否 H是 C否 D是 E否 F是

上图由三度关系,你的朋友是一度关系,你的朋友的朋友是二度关系,你的朋友的朋友的朋友是三度关系;广度优先搜索从起点开始逐步向外搜索,即先检查一度关系,再检查二度关系,最后在检查三度关系;
广度优先搜索算法既可以找到谁是经销商,也可以找到谁是关系最近的经销商;但是BFS算法必须按照添加顺序查找时,才能实现这一的目的。因此,我们使用队列(queue)数据结构实现按添加顺序查找。

三、队列问题
队列是一种先进先出(First In First Out,FIFO)的数据结构,而栈是一种先进后出(Last In First Out)的数据结构;

四、利用代码实现图结构
利用散列表可表示相邻节点关系

查找朋友
查找朋友
查找朋友 A B C D

graph={}
graph["A"]={"B","C","D"}

A被映射到一个数组,因此graph[“A”]是一个数组,其中包含了“A”的所有邻居。

点赞