算法七:BFS(广度优先搜索) [size=12.903225898742676px] 广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。BFS同样属于盲目搜索。一般用队列数据结构来辅助实现BFS算法。 [size=12.903225898742676px] 算法步骤: [size=12.903225898742676px] 1. 首先将根节点放入队列中。 [size=12.903225898742676px] 2. 从队列中取出第一个节点,并检验它是否为目标。 - 如果找到目标,则结束搜寻并回传结果。
- 否则将它所有尚未检验过的直接子节点加入队列中。
[size=12.903225898742676px] 3. 若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。 [size=12.903225898742676px] 4. 重复步骤2。 [size=12.903225898742676px] [size=12.903225898742676px] 详细介绍:广度优先搜索 算法八:Dijkstra算法[size=12.903225898742676px] 戴克斯特拉算法(Dijkstra’s algorithm)是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。 [size=12.903225898742676px] 该算法的输入包含了一个有权重的有向图 G,以及G中的一个来源顶点 S。我们以 V 表示 G 中所有顶点的集合。每一个图中的边,都是两个顶点所形成的有序元素对。(u, v) 表示从顶点 u 到 v 有路径相连。我们以 E 表示G中所有边的集合,而边的权重则由权重函数 w: E → [0, ∞] 定义。因此,w(u, v) 就是从顶点 u 到顶点 v 的非负权重(weight)。边的权重可以想像成两个顶点之间的距离。任两点间路径的权重,就是该路径上所有边的权重总和。已知有 V 中有顶点 s 及 t,Dijkstra 算法可以找到 s 到 t的最低权重路径(例如,最短路径)。这个算法也可以在一个图中,找到从一个顶点 s 到任何其他顶点的最短路径。对于不含负权的有向图,Dijkstra算法是目前已知的最快的单源最短路径算法。 [size=12.903225898742676px] 算法步骤: [size=12.903225898742676px] 1. 初始时令 S=,T=,T中顶点对应的距离值 [size=12.903225898742676px] 若存在<V0,Vi>,d(V0,Vi)为<V0,Vi>弧上的权值 [size=12.903225898742676px] 若不存在<V0,Vi>,d(V0,Vi)为∞ [size=12.903225898742676px] 2. 从T中选取一个其距离值为最小的顶点W且不在S中,加入S [size=12.903225898742676px] 3. 对其余T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值缩短,则修改此距离值 [size=12.903225898742676px] 重复上述步骤2、3,直到S中包含所有顶点,即W=Vi为止 [size=12.903225898742676px]
|