图算法与成员检测数据结构详解
一、图算法
(一)Dijkstra算法
Dijkstra算法与深度优先搜索有一些共同之处。它从单个源点开始,最终访问图中的每个节点。该算法维护两个集合:未访问集合和已访问集合。
- 未访问集合 :包含尚未在寻找最短路径时被考虑的顶点,其作用类似于深度优先搜索中的栈。
- 已访问集合 :包含所有已经计算出最短成本和路径的顶点,与深度优先搜索中的已访问集合作用相同。
为了跟踪从源点到顶点v的最短路径,只需记录路径上v的前一个顶点。算法步骤如下:
1. 初始时,将成本为0的源顶点添加到未访问集合。
2. 只要未访问集合中至少有一个顶点,就执行以下操作:
- 从未访问集合中移除成本最小的顶点,将其命名为当前顶点。因为如果有更便宜的路径,该顶点会以更小的成本存在于未访问集合中。
- 将当前顶点添加到已访问集合。
- 对于与当前顶点相邻的每个顶点:
- 检查该相邻顶点是否在已访问集合中。如果是,则无需操作,因为已经知道从源点到该顶点的最短成本。
- 如果不在已访问集合中,计算通过当前顶点到达该相邻顶点的新成本(新成本为到达当前顶点的成本加上边的权重)。如果新成本比当前到达该相邻顶点的成本更好,则更新该相邻顶点的成本,并记录当前顶点为其前一个顶点,同时将该相邻顶点添加到未访问集合。
当算法终止时,假设所有顶点都可以从源顶点到达,就计算出了到达图中所有顶点的成本,并且可以根据算法执行过程中维护的前一个顶点信息确定到每个顶点的最短路径。
复杂度
超级会员免费看
订阅专栏 解锁全文
1477

被折叠的 条评论
为什么被折叠?



