当前位置: 首页 > news >正文

第七章 狄克斯特拉算法

狄克斯特拉算法找出的是总权重最小的路径

术语介绍:

狄克斯特拉算法用于每条边都有关联数字的图,这些数字称为权重。

带权重的图称为加权图,不带权重的图称为非加权图。

计算非加权图的最短路径,可使用广度优先搜索。要计算加权图中的最短路径,可使用狄克斯特拉算法。

不能将狄克斯特拉算法用于包含负权边的图。

#实现
graph = {}
graph["you"] = ["alice","bob","claire"]
graph["start"] = {}
graph["start"] ["a"] = 6
graph["start"] ["b"] = 2
graph["a"] = {}
graph["a"] ["fin"] = 1
graph["b"] = {}
graph["b"] ["a"] = 3
graph["b"] ["fin"] = 2
graph["fin"] = {}

#创建开销表的代码如下:
infinity = float("inf")
costs = {}
costs["a"] = 6
costs["b"] = 2
costs["fin"] = infinity

#创建父节点表的代码如下:
parents = {}
parents["a"] = "start"
parents["b"] = "start"
parents["fin"] = None
#创建一个数组,用于记录处理过的节点
processed = []
def find_lowest_cost_node(costs):
    lowest_cost = float("inf")
    lowest_cost_node = None
    for node in costs:
        cost = costs[node]
        if cost < lowest_cost and node not in processed:
            lowest_cost = cost
            lowest_cost_node = node
    return lowest_cost_node
#开始狄克斯特拉算法的实现
node = find_lowest_cost_node(costs)
while node is not None:
    cost = costs[node]
    neighbors = graph[node]
    for n in neighbors.keys():
        new_cost = cost + neighbors[n]
        if costs[n] > new_cost:
            costs[n] = new_cost
            parents[n] = node
    processed.append(node)
    node = find_lowest_cost_node(costs)

相关文章:

  • Python MRO 与菱形继承问题详解
  • 什么是 “超参数” ?
  • Android第五次面试总结(HR面)
  • 每日一题力扣1920.基于排列构建数组c++
  • FPGA 以太网通信(三)
  • 【达梦数据库】用户A删除用户B下的表数据
  • 【第15章】亿级电商平台订单系统-高可用架构设计
  • 协议-CAN-CANopen
  • Android音视频多媒体开源库基础大全
  • AD(Altium Designer)已有封装库的基础上添加器件封装
  • pytorch小土堆学习有感
  • 什么是TCP,UDP,MQTT?
  • Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套
  • BlockChain.java
  • 荣获全栈身份nodejs实现登录功能
  • DHCP工作原理
  • Floyd 算法--多源最短路
  • 在 Elasticsearch 中扩展后期交互模型 - 第 2 部分 - 8.18
  • WRF/Chem 模式技术解读:为大气污染治理提供有力支撑
  • 【设计模式】常用的设计模式详解
  • 19岁女生注射头孢离世后续:院方道歉,医生停职,监管介入
  • 习近平出席俄罗斯总统举行的欢迎仪式
  • 哥伦比亚总统称将在访华期间签署“一带一路”倡议意向书,外交部回应
  • 共生与伴生:关于人工智能时代艺术评论的对象与主体的思考
  • 长沙天心阁举办古琴音乐会:文旅向深,让游客听见城市的底蕴
  • 为什么所有动物里,只有人类幼崽发育得这么慢?