最短路算法 算法 python实现

Dijkstra 算法[python]

Dijstra作为一种经典的单源最短路算法,得到了广泛应用。
算法思想如下:
说明:
S为最短路顶点集合
U为尚未加入S的顶点集合
c i j c_{ij} cij表示点i和点j之间的距离
w i j w_{ij} wij表示点i和点j之间的权重

  • 初始时S只包含源点v,v到自己的距离为0.

  • U中选择顶点temp,使得v->temp的距离最短,然后把temp加入S。

  • 以temp为中间点,调整v到U中所有顶点的最短路径,分为两种情况

  • (1)经过temp,则路径长度为 c v , t e m p c_{v,temp} cv,temp+ w t e m p , j w_{temp,j} wtemp,j

  • (2)不经过temp,则路径长度仍为 c t e m p , j c_{temp,j} ctemp,j
    则距离为MIN{ c v , t e m p c_{v,temp} cv,temp+ w t e m p , j w_{temp,j} wtemp,j c t e m p , j c_{temp,j} ctemp,j}

def dijkstra(g,v):
    INF = 1000
    dist = [INF for i in range(len(g))]  #源点到其他顶点的距离
    vis = [False for i in range(len(g))]  #是否已经纳入顶点集合
    path = [v for i in range(len(g))]  #路径
    dist[v] = 0
    path[v] = 0
    while True:
        u = -1
        min<
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
最短路算法Python中有多种实现方式,其中一种是Dijkstra算法。以下是一个用Python实现Dijkstra算法的示例代码: ```python def dijkstra(graph, start): INF = float('inf') dist = [INF * len(graph) # 源点到其他顶点的距离 visited = [False * len(graph) # 是否已经纳入顶点集合 path = [start * len(graph) # 路径 count = [0 * len(graph) # 统计最短路径数量 dist[start = 0 count[start = 1 while True: u = -1 min_dist = INF for i in range(len(graph)): if not visited[i and dist[i < min_dist: u = i min_dist = dist[i] if u == -1: return dist visited[u = True for v in range(len(graph)): if not visited[v and graph[u][v != INF: if dist[u + graph[u][v < dist[v]: dist[v = dist[u + graph[u][v] path[v = u count[v = count[u] elif dist[u + graph[u][v == dist[v and count[u > count[v]: count[v = count[u] path[v = u ``` 这段代码实现Dijkstra算法,通过传入一个图(graph)和起始顶点(start),计算出从起始顶点到其他顶点的最短路径(dist),并返回该最短路径数组。 请注意,这只是Dijkstra算法的一种实现方式,还有其他算法,如Floyd算法等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python实现dijkstra最短路算法](https://download.csdn.net/download/weixin_38676851/12865010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [最短路算法 算法 python实现](https://blog.csdn.net/weixin_43792889/article/details/115432053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值