贪心算法解决单源最短路径

 1、问题描述 

     给定带权有向图G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其他各顶点的最短路长度。这里路的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。

    2、Dijkstra算法(解题思路)

     Dijkstra算法是解单源最短路径问题的贪心算法。
    其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。初始时,S中仅含有源。设u是G的某一个顶点&#x

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贪心法实现单源最短路径算法的基本思路是:从源点开始,每次选择一条当前最短的边,将该边的终点加入到已确定最短路径的顶点集合中,直到所有顶点都被加入到该集合中。 具体实现步骤如下: 1. 初始化:将源点加入到已确定最短路径的顶点集合中,将源点到各个顶点的距离初始化为无穷大,将源点到自身的距离初始化为0。 2. 选择当前最短的边:从源点出发,选择一条当前最短的边,将该边的终点加入到已确定最短路径的顶点集合中。 3. 更新距离:对于新加入的顶点,更新源点到该顶点的距离。具体方法是,将源点到已确定最短路径的顶点集合中的每个顶点的距离与该顶点到新加入的顶点的距离相加,如果得到的和小于源点到新加入的顶点的距离,则更新源点到新加入的顶点的距离。 4. 重复步骤2和3,直到所有顶点都被加入到已确定最短路径的顶点集合中。 下面是一个使用贪心法实现单源最短路径算法的Python代码示例: ```python def dijkstra(graph, start): # 初始化 dist = {v: float('inf') for v in graph} dist[start] = 0 visited = set() while len(visited) < len(graph): # 选择当前最短的边 current = min(set(dist.keys()) - visited, key=dist.get) visited.add(current) # 更新距离 for neighbor in graph[current]: if neighbor not in visited: new_dist = dist[current] + graph[current][neighbor] if new_dist < dist[neighbor]: dist[neighbor] = new_dist return dist ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值