22、图算法与成员检测数据结构详解

图算法与成员检测数据结构详解

一、图算法
(一)Dijkstra算法

Dijkstra算法与深度优先搜索有一些共同之处。它从单个源点开始,最终访问图中的每个节点。该算法维护两个集合:未访问集合和已访问集合。
- 未访问集合 :包含尚未在寻找最短路径时被考虑的顶点,其作用类似于深度优先搜索中的栈。
- 已访问集合 :包含所有已经计算出最短成本和路径的顶点,与深度优先搜索中的已访问集合作用相同。

为了跟踪从源点到顶点v的最短路径,只需记录路径上v的前一个顶点。算法步骤如下:
1. 初始时,将成本为0的源顶点添加到未访问集合。
2. 只要未访问集合中至少有一个顶点,就执行以下操作:
- 从未访问集合中移除成本最小的顶点,将其命名为当前顶点。因为如果有更便宜的路径,该顶点会以更小的成本存在于未访问集合中。
- 将当前顶点添加到已访问集合。
- 对于与当前顶点相邻的每个顶点:
- 检查该相邻顶点是否在已访问集合中。如果是,则无需操作,因为已经知道从源点到该顶点的最短成本。
- 如果不在已访问集合中,计算通过当前顶点到达该相邻顶点的新成本(新成本为到达当前顶点的成本加上边的权重)。如果新成本比当前到达该相邻顶点的成本更好,则更新该相邻顶点的成本,并记录当前顶点为其前一个顶点,同时将该相邻顶点添加到未访问集合。

当算法终止时,假设所有顶点都可以从源顶点到达,就计算出了到达图中所有顶点的成本,并且可以根据算法执行过程中维护的前一个顶点信息确定到每个顶点的最短路径。

复杂度

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值